ListBox和WinForms应用程序
本文关键字:应用程序 WinForms ListBox | 更新日期: 2023-09-27 17:49:53
我有一个windows form1应用程序。这个表单有一个点击按钮。单击按钮时,将在click-button方法中创建一些事件处理程序。在SendText事件处理程序方法中,我创建并显示第二个Form2,其中我想打印form1中遇到的字符串值。
问题是,在我的ListBox中,我只看到一个字符串,而不是所有的(我连续发送字符串)。为什么?另外,当一个新的事件处理程序到达时,不会创建和显示额外的Form2表单。
在Form1中,我是这样调用form2的:
public void Send(string body, string name)
{
Form2 form2 = new Form2(body);
form2.Text = name;
form2.ShowDialog ();
}
public void OnMessage(first val, second vall)
{
send(string val1, string va2);
}
Form2包含:
public Form2(string s)
{
InitializeComponent();
listBox1.Items.Add(s);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
2的问题:
我怎么能创建多个Form2表单每次处理程序被激活(使用线程,不?)?
如果第一个val是相同的,当一个新的处理程序到达时,我怎么能激活已经在屏幕上的form2,并在ListBox1中添加一个新项目?
请提供例子,如果可能的话。
谢谢。
不用form2.ShowDialog();
,可以用form2.Show();
这是因为Show()是非模态的,ShowDialog()是模态的。
以下是对差异的解释。
对于第二个问题,正如其他人所说,您可以将表单及其初始名称添加到字典中。然后,无论何时添加另一个主体值,都要检查字典中是否有重复的名称值。如果存在,则将body值添加到该特定表单的列表框中。
如果我没弄错的话,你想:
- 在Send(…) 中为每个唯一的"name"参数添加一个新的form2
- 所有使用相同参数"name"调用Send(…)的调用都应该将"body"参数中的字符串添加到相关表单上的相同列表中2
这个怎么样?
Dictionary<string,From2> myForm2s = new Dictionary<string,Form2>();
public void Send(string body, string name)
{
Form2 frm = null;
if(!myForm2s.tryGetValue(name,out frm))
{
frm = new Form2(body);
myForm2s[name] = frm;
frm.Text = name;
frm.FormClosing += new FormClosingEventHandler(Form2_FormClosing);
frm.Show();
}
else
{
frm.listBox1.Items.Add(body); // assuming listBox1 is public
frm.Show();
frm.BringToFront();
}
}
void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
((Form2)sender).Hide();
}
(代码未测试…)
你可能想处理Form2的FormClosing事件…使用eventarg取消事件并调用this.Hide()…因此,如果用户点击x, Form2仍然会消失,但表单仍然在那里,准备在下一个事件添加内容时重新显示…
尝试使你的表单静态
static Form2 form2;
public void Send(string body, string name)
{
form2 = new Form2(body);
form2.Text = name;
form2.ShowDialog();
}
使用字典存储按名称排序的已打开的Form2:
private Dictionary<string, Form2> forms = new Dictionary<string, Form2>();
public void Send(string body, string name)
{
if(forms.ContainsKey(name))
{
forms[name].AddNewItem(body);
}
else{
Form2 form2 = new Form2(body);
form2.Text = name;
forms.Add(name, form2);
form2.ShowDialog();
}
}
和Form2将包含:
public Form2(string s)
{
InitializeComponent();
listBox1.Items.Add(s);
}
public void AddNewItem(string s)
{
listBox1.Items.Add(s);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
希望这对你有帮助