庄继艳有什么靠山:c#中,form4的button_Click如何往form1中的ComboBox添加Items?

来源:百度文库 编辑:高考问答 时间:2024/05/04 14:59:27
这是一段往button1所在的窗口的combobox1添加items的代码(也就是说button1和combobox1在一个窗口里),

comboBox1.Items.Add(textBox1.Text);
/*若要在ComboBox控件里添加或删除项,用
Items.ADD,Items.Inset,Items.Clear,Items.Remove.或者在设计器中使用Items的属性
列表
用AddRange方法分配一个对象引用数组,Add方法添加单个对象*/

那么如果我这个窗口是form4,但是我的combobox1在form1里
(button1和combobox1不在一个窗口里),这个代码怎么写?

Form1.combobox1.Items.Add(textBox1.Text); 不行,
提示 : 非静态的字段、方法或属性“test.Form1.combobox1”要求对象引用

C#中的可视控件是不能给非创建它的线程直接操作的,也就是说,你的form4执行时是另一个线程在执行,这样就无法去操作由FORM1创建的combobox1控件。
但是可能通过combobox1的ivoke方法来间接操作。
你必须先创建一个代理,再为这个代理编写一个方法,
把这个方法加到代理里头去,通过ivoke方法调用此代理
这个就可以对FORM1中的控件进行操作了。

这里给出一个简单的示例:
public delegate void setRichtextSF();//创建代理
private void sendFile()//操作方法函数
{
comboBox1.Items.Add(textBox1.Text); //操作代码
}

setRichtextSF setRichtext = new setRichtextSF(sendFile);//创建代理实例,把方法sendFile加到代理里去
comboBox1.Invoke(setRichtext);
//调用invoke方法