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();
也许你可以尝试这样的事情。
扫描每个表单以查找发件人,如果您在任何表单中都找不到该名称,请打开与该发件人的新聊天框。如果您确实找到了它,那么只需专注于该聊天框即可。
// 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();