Die richtige Art zu überprüfen, ob ein Formular bereits angezeigt wird?

8

Ich habe eine Task-Management-Anwendung erstellt und wollte die Möglichkeit implementieren, dass zwei Benutzer über bestimmte Aufgaben chatten können.

In Form1 Ich habe einen Timer, der die Datenbank auf neue Nachrichten prüft. Wenn eine neue Nachricht gefunden wird, erscheint das Chat-Formular mit der Nachricht.

Bis jetzt funktioniert alles wie erwartet, aber ich habe nur ein Problem.

Das Problem: Sobald eine neue Nachricht zum ersten Mal gefunden wurde, erscheint das Chat-Fenster, aber wenn eine neue Nachricht gefunden wird, erscheint ein weiteres Fenster und für jede neue Nachricht wird eine neue Instanz des Chat-Fensters erstellt.

Der Code, den ich verwende:

%Vor%

Ich habe versucht, die Zeile zu ersetzen:
frm14.Show(); mit frm14.ShowDialog();

Ich habe bemerkt, dass beim Empfang der neuen Nachricht das Chat-Fenster (form14) angezeigt wird, und wenn eine andere Nachricht von demselben Benutzer eingeht, wird kein neues Chat-Fenster angezeigt, aber das Problem ist, dass ich das Chat-Fenster schließe Es erscheint nicht mehr, selbst wenn ich neue Nachrichten erhalte.

Was ich denke, ist, das Chat-Fenster (Form14.Text) in den vollen Namen des Benutzers zu ändern, und beim nächsten Empfang einer Nachricht überprüfe ich, ob das bestimmte Fenster bereits geöffnet ist, und öffne es sonst nicht Ich zeige das Formular mit der Methode .Show() .

Ist dies der richtige Weg, um das Fenster nicht erscheinen zu lassen, wenn eine neue Nachricht empfangen wird und diese bereits geöffnet ist? und Wie kann man prüfen, ob ein Fenster entsprechend seinem Text (Titelleiste) geöffnet ist?

Danke, dass du dir Zeit genommen hast, meine Frage zu lesen. Jede Hilfe würde sehr geschätzt werden

    
Rafik Bari 17.02.2013, 11:08
quelle

2 Antworten

10

Zuerst erstellen Sie eine neue Instanz von Form14 jedes Mal, wenn Sie eine neue Nachricht haben.

Zweitens Show und ShowDialog machen zwei sehr unterschiedliche Dinge:

Zeigen zeigt nur das Formular an, während ShowDialog zeigt das Formular als modalen Dialog an. Dies bedeutet, dass der Benutzer nichts anderes tun kann, bis das Formular geschlossen wird.

Sie benötigen eine einzelne Instanz des Formulars, und Sie können die Eigenschaft Visible verwenden, um festzustellen, ob sie angezeigt wird oder nicht. Sie hätten also:

%Vor%

Dann im Konstruktor:

%Vor%

Dann in Ihrem Code:

%Vor%     
ChrisF 17.02.2013, 11:18
quelle
3

Versuchen Sie, form14 zu einem Mitglied von form1 zu machen. Wenn Sie eine neue Nachricht erhalten, überprüfen Sie die Visible-Eigenschaft von forom14 zu wissen, ob es bereits zeigt.

    
omer schleifer 17.02.2013 11:16
quelle

Tags und Links