在Dockpanel中的窗体1主动调用窗体2里的控件listbox1用委托方法,C#代码实现。
时间: 2024-02-18 15:02:20 浏览: 84
假设窗体1的名称为Form1,窗体2的名称为Form2,listbox1的名称为listBox1,以下是一种实现方式:
1. 在Form2中定义一个委托类型,用于访问listBox1控件:
```
public delegate void UpdateListBoxDelegate(string text);
```
2. 在Form2中定义一个公共方法,该方法接受一个字符串参数,并使用委托来更新listBox1控件:
```
public void UpdateListBox(string text)
{
if (listBox1.InvokeRequired)
{
listBox1.Invoke(new UpdateListBoxDelegate(UpdateListBox), text);
}
else
{
listBox1.Items.Add(text);
}
}
```
3. 在Form1中创建一个Form2对象,并将其保存在一个成员变量中:
```
private Form2 form2;
```
4. 在Form1中创建一个公共方法,该方法使用委托来访问listBox1控件:
```
public void UpdateForm2ListBox(string text)
{
if (form2 != null)
{
form2.UpdateListBox(text);
}
}
```
5. 在Form1中调用UpdateForm2ListBox方法,以更新Form2中的listBox1控件:
```
private void button1_Click(object sender, EventArgs e)
{
UpdateForm2ListBox("Hello from Form1!");
}
```
注意:在调用Form2的UpdateListBox方法时,应该首先检查listBox1控件是否需要Invoke,如果需要,则使用Invoke方法将操作委托到UI线程。这是因为listBox1控件属于Form2的线程,而不是Form1的线程,因此不能直接访问它。
阅读全文