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
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:
Dann im Konstruktor:
%Vor%Dann in Ihrem Code:
%Vor%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.