12

我创建了一个任务管理应用程序,我想实现 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.Show();frm14.ShowDialog();

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

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

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

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

4

2 回答 2

18

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

其次ShowShowDialog做两件非常不同的事情:

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

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

private Form14 frm14;

然后在构造函数中:

frm14 = new Form14();

然后在您的代码中:

if (!frm14.Visible)
{
    // Add the message
    frm14.Show();
} else{
    // Top
    frm14.BringToFront();
}
于 2013-02-17T11:18:47.253 回答
3

尝试使 form14 成为 form1 的成员。当您收到一条新消息时,请检查 forom14 的 Visible 属性以了解它是否已经显示。

于 2013-02-17T11:16:08.123 回答