0

所以我正在开发一个聊天系统。我想遍历打开的表单,并检查它与字符串列表(form.text!= s)。如果它没有找到与人名相同的打开表单,那么它会打开它的一个新实例。我的问题是,如果表格打开与否,它不会被捕获。它只是自动将其放入要打开的表单列表中。我也不知道为什么,因为它检测到表单已被该文本打开,但仍将它们添加到列表中并打开一个新表单。有什么帮助吗?

                    FormCollection fc = Application.OpenForms;
                    foreach (Form f in fc)
                    {
                        if (f.Text != iRow["Sender"].ToString())
                        {
                            if (!people.Contains(iRow["Sender"].ToString()))
                            {
                                people.Add(iRow["Sender"].ToString());
                            }
                        }
                        else if (f.Text == iRow["Sender"].ToString())
                        {
                            f.BringToFront();
                        }
                    }




                    foreach (string s in people)
                    {

                        ChatBox chat = new ChatBox();
                        Connection.ConnectionStrings.chatopen = s;
                        chat.Text = s;
                        chat.Show();
                        chat.BringToFront();
                        ChatBox.sound.playsound.Play();


                    }


                people.Clear();
4

3 回答 3

1

也许你可以尝试这样的事情。

扫描每个表单以查找发件人,如果您在任何表单中都找不到该名称,请打开与该发件人的新聊天框。如果你确实找到了它,那么只需关注那个聊天框。

// Has sender been found
var found = false;

// get the sender ???
var sender = iRow["Sender"].ToString();

FormCollection fc = Application.OpenForms;
foreach (Form f in fc)
{
    // does the form text match our sender 
    if (f.Text == sender)
    {
        f.BringToFront();
        found = true;
        break;
    }
}

// if we did not find a form matching the sender
if ( !found )
{
    ChatBox chat = new ChatBox();
    Connection.ConnectionStrings.chatopen = sender;
    chat.Text = sender;
    chat.Show();
    chat.BringToFront();
    ChatBox.sound.playsound.Play();
}
于 2013-10-01T03:34:02.507 回答
0

看到您的代码后可能会有所帮助的两件事

1 - 您正在清除底部的人员集合,从而启用条件

                  if (f.Text != iRow["Sender"].ToString())
                    {
                        if (!people.Contains(iRow["Sender"].ToString()))
                        {
                            people.Add(iRow["Sender"].ToString());
                        }
                    }

在某些情况下,我不知道您的代码,但这是可能的。

2-要激活表单,您可以使用以下代码

        appform.Activate();
        appform.Show();
于 2013-10-01T03:44:03.760 回答
0

什么是 iRow["Sender"]?

也许 iRow["Sender"] 有一些意想不到的价值。

在另一种情况下,您应该确保 f.Text 的值字段只是 iRow["Sender"].ToString() 的值字段

于 2013-10-01T03:03:02.087 回答