Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.12.2010, 08:43

Konflikt mit 2 Dialogen

Hallo Community

In einem meiner Test - Applikationen öffne ich ein Fenster, in welchem man diverse Einstellungen vornehmen kann.
Im unteren Teil des Fensters kann man mit "OK" bestätigen oder aber "Abbrechen":

Quellcode

1
2
FormName f = new FormName(...);
DialogResult r = f.ShowDialog(this);


Wenn jetzt die Eingabe innerhalb dieses Fensters fehlerhaft ist, zeige ich eine Fehlermeldung an:

Quellcode

1
DialogResult r= MessageBox.Show("TEXT", "Warnung", MessageBoxButtons.OK);


Wenn ich nun diese Meldung mit Ok (oder auch mit dem [x] schliesse). Schliesst sich zusätzlich auch das vorher geöffnete Fenster (FormName).

Ich verstehe aber nicht warum? muss ich da noch was zusätzlich angeben?

Das DialogResultat behandle ich folgendermassen:

Quellcode

1
2
3
4
if(r == DialogResult.OK)
{
    // Mach was
}


Danke für die HIlfe
Gruss
Master Chief

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

20.12.2010, 08:54

Mehr Code. Ohne ist jede Vermutung zwecklos.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

20.12.2010, 09:02

Viel mehr Code habe ich aber nicht =)

Ich habe ein normales Form erstellt. Ohne iregnewelchen speziellen Eigenschaften.
Ausser, dass ich bei den beiden Buttons ein DialogResult hinterlegt habe, da ich dieses benötige.

Und ja, bei der MessageBox braucht es nicht mehr Code.

Oder wo denkst du brauchst du mehr Code?? Hast du eine Vermutung?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

20.12.2010, 09:06

Völlig egal wie viel mehr Code du hast. Eine einzige Zeile kann der Fehler sein.
Aber ohne das kann man keine Hilfe leisten.
Also... poste doch einfach den Rest noch.

(über welche Sprache reden wir hier eigentlich? Ich vermute mal C#!?)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

5

20.12.2010, 09:09

Gibt es einen Grund, warum du das Fenster über ShowDialog() anzeigst und nicht normal über Show()?
Änder das doch mal und schau ob das Verhalten gleich ist, wenn nicht könnte es an den geschachtelten Dialogen liegen.

Thoran
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

20.12.2010, 09:18

ShowDialog() zeigt das Fenster modal an, Show() nicht. Das kann durchaus der Grund sein.
Ich bin mir sehr sicher, dass es nicht daran liegt oder liegen kann. Das Parent sollte sich nie einfach so schließen, nach dem Wegklicken einer MessageBox, unabhängig davon, ob es modal angezeigt wird oder nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

20.12.2010, 09:22

Ja, ich brauche das ShowDialog(). da ich sonst von dem geöffneten Fenster das DialogResult nicht abfangen kann (wüsste zumindest nicht wie das sonst noch gehen sollte).

Wie gewünscht noch der ganze Code =)

Form1 (von dort wird das 1. Fenster (FormName) aufgerufen):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FormName f = new FormName();
            DialogResult r = f.ShowDialog(this);

            if (r == DialogResult.OK)
            {
                // Mach was
            }
        }
    }


FOrmName (in welchem ich den beiden Buttons ein DialogResult zusätzlich als Eigenschaft gegeben habe):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public partial class FormName : Form
    {
        public FormName()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult r = MessageBox.Show("FEHLERMELDUNG", "Fehler", MessageBoxButtons.OK);

            if (r == DialogResult.OK)
            {
                // Mach was
            }
        }
    }


Thats it. Sonst habe ich alles auf Standard gelassen. (oben genannter Code istnicht meine Applikation, da ich diese gerade nicht zur Hand habe.) Jedoch tritt bei obigem Code der Fehler, bzw. dieses Verhalten ebenfalls auf.

danke

// EDIT
Beim zweiten Code - Beispiel, bracuht es die Verarbeitung des Dialogresults nicht umbedingt, da man da sowieso nur OK klicken kann.

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

8

20.12.2010, 09:46

Ich würde zu Testzwecken trotzdem vorschlagen, das erste Fenster per Show() zu öffnen, einfach nur um das Verhalten zu vergleichen. Wenn dann das beschriebene Problem nicht auftritt weißt du sicher, dass es mit den Modalmodus zu tun hat. Warum das dann so ist, ist ne andere Frage, aber dazu müßte ich auch Google bequemen.

Thoran
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

20.12.2010, 09:49

Da steht wirklich "// Mach was"? Ich hätte erwartet, dass da irgendwas anderes steht.

Denn bei mir wird mit diesem Code da oben nichts geschlossen.


@Thoran:
Das ist Quatsch, hör bitte mit diesem Vorschlag auf. Ich habe den Code oben getestet, er ist absolut korrekt so.
Mit "Show()" wäre er mit einer ganz anderen Logik und einem ganz anderen Verhalten verknüpft.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

10

20.12.2010, 09:54

Ist doch normales Verhalten. Wenn dein Button die DialogResult Eigenschaft gesetzt hat wird das Fenster nunmal geschlossen wenn du draufklickst.
Du kannst das schließen des Fensters natürlich im Form_Closing abbrechen, oder den Button erst dann enablen, wenn die Daten im Dialog in Ordnung sind.

Werbeanzeige