?c# 有两个窗口,怎么调用另一窗口的控件
求助?c# 有两个窗口,如何调用另一窗口的控件?Form1 有个listbox1,Form2有个textbox1,button1.最终结果:按f
求助?c# 有两个窗口,如何调用另一窗口的控件? Form1 有个listbox1,Form2有个textbox1,button1. 最终结果:按form2的button1按钮,把textbox1.text的值添加到form1的listbox1中 本人试过把listbox1设成public, 在form2中 private void button2_Click(object sender, EventArgs e) { Form1 pForm1=new Form1(); pForm1.listbox1.items.add(textbox1.text); } 经过试验。。。form1中的listbox1没反应。。没出错,没有添加到任何东西!! 如何做才对??知道的各位大侠能否告诉一下小弟![解决办法] private void button2_Click(object sender, EventArgs e) { Form1 pForm1=Form1(Application.OpenForms["Form1"]); pForm1.listbox1.items.add(textbox1.text); } 要理解new的意思,既然写了new,那就是新生成的一个实例,跟你已经存在的Form1不是一回事[解决办法] Form1 pForm1=new Form1(); pForm1没有显示啊!怎么看啊?[解决办法] //form1 调用 Form2 frm=new Form2(); form.ShowDialog (this); private void button2_Click(object sender, EventArgs e) { Form1 pForm1=( Form1)this.Owner; pForm1.listbox1.items.add(textbox1.text); } ***************************************************************************** 欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/[解决办法] form1中加入: Form2 dlg = new Form2(); dlg.Owner = this; dlg.ShowDialog(); 同时设置listBox1的属性为public form2中加入: private void button1_Click(object sender, EventArgs e) { Form1 pForm1 = (Form1)this.Owner; pForm1.listBox1.Items.Add(textBox1.Text); }[解决办法]
探讨 private void button2_Click(object sender, EventArgs e) { Form1 pForm1=Form1(Application.OpenForms["Form1"]); pForm1.listbox1.items.add(textbox1.text); } 要理解new的意思,既然写了new,那就是新生成的一个实例,跟你已经存在的Form1不是一回事[解决办法] C# code((ListBox)Application.OpenForms["Form1"].Controls.Find("listbox1", true)[0]).Items.Add(textbox1.text);[解决办法] 探讨 private void button2_Click(object sender, EventArgs e) { Form1 pForm1=Form1(Application.OpenForms["Form1"]); pForm1.listbox1.items.add(textbox1.text); } 要理解new的意思,既然写了new,那就是新生成的一个实例,跟你已经存在的Form1不是一回事[解决办法] Form1 pForm1=new Form1(); ------------- 这句将生成一个隐藏的Form,因为你没让这个form show出来. 在form2中需要一个form1的引用,要保证他就是你要的那个form1. Form1 pForm1=(Form1)Application.OpenForms["Form1"] 这么做可以得到之前的对象,然后再按你那么做就可以了.[解决办法] private void button2_Click(object sender, EventArgs e) { Form1 pForm1=Form1(Application.OpenForms["Form1"]); pForm1.listbox1.items.add(this.textbox1.text); } [解决办法] 在form2 中定義一個事件 clickEvent; 當form2 的button_click時,則觸發這個事件 button_click(object sender,evetargs e) { if(clickEvent!=null) clickEvent(this,e); } form1 中在創建form2的對象時這樣寫 form2 frm=new form2(); frm.clickEvent+=new EventHandle(addItem); frm.show(); private void addItem(object sender,eventArgs e) { form2 frm=sender as form2; this.listbox1.items.add(frm.textBox1.text); } 包你可以!![解决办法]
探讨 引用: 跨窗口的控件访问, 要砍头的, 非常SB的做法. 这种简单问题用事件、委托、参数不觉得杀鸡用牛刀么,练ms都觉得提供个OpenForms比较省事,而且绝对不会错,把简单事情复杂化,孤芳自赏,标榜技术没有意义,[解决办法] 探讨 public static FormCollection OpenForms { get; } 这个跟暴露窗体内控件对象有何相同的地方吗? 稍微上点规模的程序都不建议将控件 public 出来, 不知道你说的复杂化来自哪里. 如果这也算作孤芳自赏, 标榜技术, 那你对技术的理解也忒低了.[解决办法] 委托事件 form1 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 f = new Form2(); f.Show(); f.Myevet += new Form2.Mydel(f_Myevet); } void f_Myevet(string str) { listBox1.Items.Add(str); //throw new NotImplementedException(); } } } form2 using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form2 : Form { public delegate void Mydel(string str); public event Mydel Myevet; public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (Myevet != null) { Myevet(textBox1.Text); } } } }