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

C# 检查表单是否已显示的正确方法?,c#,.net,winforms,C#,.net,Winforms,我已经创建了一个任务管理应用程序,我想实现让2个用户可以谈论特定任务的功能 在Form1中,我有一个计时器,可以在数据库中检查发送的任何新消息。当发现新消息时,聊天窗体将显示该消息 到目前为止,一切正常,但我只有一个问题 问题: 一旦第一次发现一条新消息,聊天窗口就会出现,但当发现另一条新消息时,就会出现另一个窗口,并且对于每一条新消息,我都会创建一个新的聊天窗口实例 我正在使用的代码: List<string> tasksToDiscuss = checkForTasksToDi

我已经创建了一个任务管理应用程序,我想实现让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();
                    }

 }
List taskstodiscus=checkForTasksToDiscuss(全名);
如果(taskstodiscussion.Count>0){
//直接打开聊天窗口
Form14 frm14=新Form14();
frm14.get_from=全名;
frm14.get_to=tasksto讨论[1];
frm14.get_task_id=int.Parse(taskstodiscussion[3]);
//将消息设置为已读
if(setMessageAsRead(taskstodiscussion[1],fullname,int.Parse(taskstodiscussion[3]))
{
//现在显示聊天窗口
frm14.Show();
}
}
我试图替换以下行:
frm14.Show()带有
frm14.ShowDialog()

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

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

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


谢谢你花时间阅读我的问题。任何帮助都将不胜感激

尝试让form14成为form1的成员。 当您收到新消息时,请检查forom14的Visible属性
要知道它是否已经显示。

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

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

仅显示表单,而将表单显示为模式对话框。这意味着用户在关闭表单之前不能执行任何其他操作

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

private Form14 frm14;
然后在构造函数中:

frm14 = new Form14();
然后在代码中:

if (!frm14.Visible)
{
    // Add the message
    frm14.Show();
} else{
    // Top
    frm14.BringToFront();
}

您的代码正在按预期工作。但是如果我在与其他人聊天时收到另一个用户的新消息怎么办?@ShikataGaNai在这种情况下,你可能需要一个表单列表——系统中每个用户一个表单。用字典替换单个表单,或者甚至让它成为用户的一个适当的名称。