Foreach 循环访问字符串列表并将其与打开的表单进行比较

本文关键字:表单 比较 访问 循环 字符串 列表 Foreach | 更新日期: 2023-09-27 18:33:27

所以我正在研究一个聊天系统。我想遍历打开的表单,并将其与字符串列表(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();

Foreach 循环访问字符串列表并将其与打开的表单进行比较

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

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

// 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();
}

什么是 iRow["发件人"]?

也许 iRow["发件人"] 会占用一些意想不到的值。

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

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

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

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

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

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

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