检查表单是否已显示的正确方法?

Raf*_*ari 10 .net c# winforms

我已经创建了一个任务管理应用程序,我想实现2个用户聊天特定任务的能力.

Form1我有一个计时器,检查数据库中发送的任何新消息.找到新消息后,将显示聊天表单以显示消息.

直到现在,一切都按预期工作,但我只有一个问题.

问题:第 一次发现新消息时,会出现聊天窗口,但是当找到另一个新消息时,会出现另一个窗口,并且对于每个新消息,我都会创建一个新的聊天窗口实例.

我正在使用的代码:

 List<string> 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();
                    }

 }
Run Code Online (Sandbox Code Playgroud)

我试图更换线:
frm14.Show();frm14.ShowDialog();

我注意到,当收到新消息时,会显示聊天窗口(form14),当从同一用户收到另一条消息时,不会出现新的聊天窗口,但问题是我关闭聊天窗口后,它没有即使我收到新消息,也不会再出现了.

我的想法是将聊天窗口(Form14.Text)更改为用户全名,下次收到消息时,我检查特定窗口是否已打开,然后不要打开它,否则我显示形式使用该.Show()方法.

如果收到新消息并且打开了它,这是否是使窗口不显示的正确方法?以及如何根据文本(标题栏文本)检查窗口是否打开?

感谢您花时间阅读我的问题.任何帮助将受到高度赞赏

Chr*_*isF 13

首先,Form14每次有新消息时,您都要创建一个新实例.

其次Show,ShowDialog做两件截然不同的事情:

Show只显示表单,而ShowDialog将表单显示为模式对话框.这意味着用户在解除表单之前无法执行任何其他操作.

您需要拥有表单的单个实例,并且可以使用该Visible属性来确定是否显示该表单.所以你会:

private Form14 frm14;
Run Code Online (Sandbox Code Playgroud)

然后在构造函数中:

frm14 = new Form14();
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中:

if (!frm14.Visible)
{
    // Add the message
    frm14.Show();
} else{
    // Top
    frm14.BringToFront();
}
Run Code Online (Sandbox Code Playgroud)