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

标签 c# .net 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();
                    }

 }

我尝试用 frm14.ShowDialog();

替换行:
frm14.Show();

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

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

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

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

最佳答案

首先,每次收到新消息时,您都会创建一个新的 Form14 实例。

其次,ShowShowDialog 做了两件截然不同的事情:

Show只显示表格,而 ShowDialog将表单显示为模态对话框。这意味着用户在关闭表单之前不能做任何其他事情。

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

private Form14 frm14;

然后在构造函数中:

frm14 = new Form14();

然后在你的代码中:

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

关于c# - 检查表单是否已显示的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920434/

相关文章:

c# - 在 C# 中使用 IBM Informix ODBC 驱动程序查询问题

.net - 如何使用 C# 正则表达式匹配任意字符串中的最后一个字符?

.Net UserControl XCode 等价物

.net - 在 App.config 中存储 MySQL 连接字符串时,providerName 属性应设置为什么值?

c# - 如何将空白文本框值作为 null 传递给绑定(bind)日期时间

c# - 如何在 C# 中将子字符串从一个分隔符提取到另一个分隔符?

c# - 从规范化表中获取数据

winforms - 需要帮助将具有透明背景的图像设置到剪贴板

c# - WebBrowser 类 - 如何打印没有页眉/页脚的文档?

c# - 安全字符串格式对象 C#