检查表单是否已显示的正确方法?
我创建了一个任务管理应用程序,我想实现2个用户聊聊特定任务的能力。
在Form1
我有一个计时器,可以检查数据库中是否有任何新消息发送。 找到新消息后,聊天表单将显示该消息。
到目前为止,一切都按预期工作,但我只有一个问题。
问题:第一次找到新消息后,会出现聊天窗口,但是当找到另一个新消息时,会出现另一个窗口,并且对于每个新消息,我都会创建一个新的聊天窗口实例。
我正在使用的代码:
List tasksToDiscuss = checkForTasksToDiscuss(fullname); if (tasksToDiscuss.Count > 0) { // open the chat window directly minimized Form14 frm14 = new Form14(); frm14.get_from = fullname; frm14.get_to = tasksToDiscuss[1]; frm14.get_task_id = int.Parse(tasksToDiscuss[3]); // set message as read if (setMessageAsRead(tasksToDiscuss[1], fullname, int.Parse(tasksToDiscuss[3]))) { // now show the chat window minimized frm14.Show(); } }
我试图替换这条线:
frm14.Show();
与frm14.ShowDialog();
我注意到,当收到新消息时,会显示聊天窗口(form14),当从同一用户收到另一条消息时,不会出现新的聊天窗口,但问题是我关闭聊天窗口后,它没有即使我收到新消息,也不会再出现了。
我的想法是将聊天窗口(Form14.Text)更改为用户全名,下次收到消息时,我检查特定窗口是否已经打开,然后不要打开它,否则我显示使用.Show()
方法形成。
如果接收到新消息并且打开了它,这是否是使窗口不显示的正确方法? 以及如何根据文本(标题栏文本)检查窗口是否打开?
感谢您花时间阅读我的问题。 任何帮助将受到高度赞赏
首先,每次有Form14
时,您都要创建Form14
的新实例。
其次Show
和ShowDialog
做了两件截然不同的事情:
Show只显示表单,而ShowDialog将表单显示为模式对话框。 这意味着用户在解除表单之前无法执行任何其他操作。
您需要拥有表单的单个实例,并且可以使用Visible
属性来确定它是否显示。 所以你会:
private Form14 frm14;
然后在构造函数中:
frm14 = new Form14();
然后在你的代码中:
if (!frm14.Visible) { // Add the message frm14.Show(); } else{ // Top frm14.BringToFront(); }
尝试使form14成为form1的成员。 当您收到新消息时,请检查forom14的Visible属性以了解它是否已显示。