AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [C#] Zweite Form nur einmal aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

[C#] Zweite Form nur einmal aufrufen

Ein Thema von MathiasSimmack · begonnen am 27. Sep 2004 · letzter Beitrag vom 27. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

[C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 16:55
Folgendes Problem: Gemäß einem Beispiel im .NET-Framework SDK habe ich folgende Codezeilen versucht, um aus meiner Hauptform eine zweite Form zu öffnen:
Code:
aForm = new AddingUnit();
if (aForm.ShowDialog(this) == DialogResult.OK)
{
  // noch nix da
}
aForm.Dispose();
Klappt auch. So weit, so gut. Aber die Hauptform reagiert in dem Fall immer noch auf den Shortcut des Menüeintrags (Einfg), so dass ich diese zweite Form eben mehrfach öffnen konnte. Ich habe mir im Moment damit beholfen, den o.g. Code wie folgt einzuklammern
Code:
if (aForm == null)
{
  // der Code von eben


  aForm = null;
}
Jetzt tut es zwar das, was ich will, aber geht das nicht auch generell einfacher?

Ach ja: Falls es von Wichtigkeit ist, ich fummle mit der Visual C# Express 2005er-Beta und dem .NET-Framework 2.0 Beta herum.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 17:10
eine "hübschere" Implementierung eines Resourcenschutzblockes ist das da:
Code:
using(aForm = new AddingUnit())

   if (aForm.ShowDialog(this) == DialogResult.OK)
   { 
     // noch nix da
   } 
}
In einem absoluen Notfall kannst du danach...
Code:
   GC.Collect();
   GC.WaitForPendingFinalizers();
... aufrufen. (Ist aber nicht "hübsch")

Oder ein abgeschwächtes Singleton (bei einem "richtigen" singleton springt dir der Designer auf's Dach )
Code:
class AddingUnit :Form
{
   private static AddingUnit fInstance;

   public static AddingUnit CreateInstance()
   {
      if (fInstance == null)
        fInstance = new AddingUnit();

      return fInstance;
   }
   ...
}
Nachtrag:
Das 2. verhindert aber nur Instanzen n > 1.
Code:
   aForm = AddingUnit.CreateInstance();
   if (aForm.ShowDialog(this) == DialogResult.OK)
   { 
     // noch nix da
   }
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#3

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 17:16
Das kann ich mit Framework 1.1 und dem CSB 1.0 nicht nachvollziehen:
Winforms-Anwendung, Mainmenü auf Form geklatscht, Eintrag erstellt und den Shortcut auf "Ins" gestellt. Zweite Winform erzeugt und diese im Klick-Event des Menüeintrages auf der ersten Form per ShowModal() aufgerufen.
Nach einmaligem Drücken der Einfg-Taste hat sich das zweite Fenster problemlos geöffnet, aber kein zweites Mal, die erste Form war nicht mehr in den Vordergrund zu holen und auf diverseste Klicks auf den Menüeintrag hat auch nichts regaiert (naja, die titelleiste der zweiten Form hat geblinkt ).
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 17:23
*g* Ich hatte dich zwar erst falsch verstanden, aber mit dem pseudo-singleton dürftest du die Lösung haben.
Es wird ja bei mehrfachen Aufrufen von AddinUnit.CreateInstanz() immer wieder die gleiche Instanz übergeben.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#5

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 17:24
Mein Beitrag bezog sich nicht auf deinen, Robert, als ich gepostet und probiert habe, war deiner noch gar nicht da
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 17:29
Und ich meinte Mathias. (Ich hatte ihn wirklich falsch verstanden. *g* )
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 17:51
Häh?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 18:09
Zitat von tommie-lie:
Das kann ich mit Framework 1.1 und dem CSB 1.0 nicht nachvollziehen
Darum schrieb ich ja als Anmerkung, dass ich es mit VC# 2005 und .NET 2.0 probiere.

Zitat:
Nach einmaligem Drücken der Einfg-Taste hat sich das zweite Fenster problemlos geöffnet, aber kein zweites Mal, die erste Form war nicht mehr in den Vordergrund zu holen und auf diverseste Klicks auf den Menüeintrag hat auch nichts regaiert (naja, die titelleiste der zweiten Form hat geblinkt ).
Ja, das Geblinke habe ich auch. Aber bei mir kannst du eben durch Drücken der Einfg-Taste die Form mehrfach öffnen. Na ja, auch nicht schlecht. Nein, ernsthaft: Ich schieb´s für den Moment dann einfach mal auf einen Beta-Problem. Wie gesagt, sowohl VC# 2005 als auch .NET 2.0 sind ja noch Betas.


Zitat von Robert_G:
Ich hatte ihn wirklich falsch verstanden.
Heißt das, ich kann ignorieren, was du da geschrieben hast? Würde ich gern, weil: ich hab´ eh nicht verstanden, was du von mir wolltest.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 18:24
Einfach das mit in deinen Form descendant einbauen:
Code:
class AddingUnit :Form
{
   private static AddingUnit fInstance;

   public static AddingUnit CreateInstance()
   {
      if (fInstance == null)
        fInstance = new AddingUnit();

      return fInstance;
   }
   ...
}
Kiek dir mal genau an was das macht.
Damit ist das:
Code:
   aForm = AddingUnit.CreateInstance();
... exakt das gleiche wie:
Code:
   aForm = AddingUnit.CreateInstance();
   aForm = AddingUnit.CreateInstance();
   aForm = AddingUnit.CreateInstance();
   aForm = AddingUnit.CreateInstance();
   aForm = AddingUnit.CreateInstance();
   aForm = AddingUnit.CreateInstance();
   aForm = AddingUnit.CreateInstance();
Wenn du dieses abgeschwächte Singleton in deine Form-ableitung packst, kannst du immer nur eine Instanz bekommen, egal wie oft du sie aufrufst.
also statt:
Code:
   aForm = new AddingUnit();
janz einfach:
Code:
   aForm = AddingUnit.CreateInstance();
Edit: Kann man sich eigentlich wirklich sooft vertippen?
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#10

Re: [C#] Zweite Form nur einmal aufrufen

  Alt 27. Sep 2004, 19:30
Zitat von MathiasSimmack:
Zitat von tommie-lie:
Das kann ich mit Framework 1.1 und dem CSB 1.0 nicht nachvollziehen
Darum schrieb ich ja als Anmerkung, dass ich es mit VC# 2005 und .NET 2.0 probiere.
Ja, mein Hinweis war ja auch so zu verstehen, daß dieses Problem mit FW1.1 nicht auftritt und daher wohl ein Problem mit modalen Winforms in FW2.0b sein muss.

Zitat:
Na ja, auch nicht schlecht.
Stimmt, du bist wohl der erste in diesem Form, der es schafft, daß andere Forms bei einem modalen Dialog trotzdem noch reagieren
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz