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