Foreach遍历字符串列表并将其与打开的表单进行比较

时间:2013-10-01 02:42:33

标签: c# forms

所以我正在开发一个聊天系统。我想迭代打开的表单,并检查它与字符串列表(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();

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

什么是iRow [“发件人”]?

也许iRow [“发件人”]会有一些意想不到的价值。

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

答案 2 :(得分:0)

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

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

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

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

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

        appform.Activate();
        appform.Show();