winform窗体间传值有关问题
winform窗体间传值问题
现在有子窗体A和主窗体B,在A和B里分别有一个ListBox,现在要将A里面ListBox里面的值传给B里面的ListBox,具体应该怎么做呢?急!在网上查过很多资料,尝试过,还是没成功,搞不清楚到底是要怎么传?最好是给出具体的代码
------解决思路----------------------
http://bbs.csdn.net/topics/390128592
------解决思路----------------------
这方面的资料网上早已经一大把了,
请参考http://www.cnblogs.com/tomin/archive/2009/02/25/1397677.html
------解决思路----------------------
form1中的textbox1的modifilers设为Public,
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog(this);
}
form2:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Form1 f1 = (Form1)this.Owner;
f1.textBox1.Text = listBox1.SelectedItem.ToString();
}
------解决思路----------------------
最简单的,构造函数传值。
自定义一个类 class1,存储你要传的变量值。
在新窗体的构造函数中,把class1作为构造函数的参数。这总明白了吧。
第三种方法:用构造函数
在窗体Form2中
------解决思路----------------------
--------------------------------------------------------------------
对于新手而言,,上图上代码直观,毕竟也是走过的路。。
-------------------
-----主窗体B代码
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(listBox1);
f2.ShowDialog();
}
------子窗体A代码
public Form2()
{
InitializeComponent();
}
ListBox lstbox2;
public Form2(ListBox lstbox1)
{
lstbox2 = lstbox1;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
lstbox2.Items.Add(listBox1.Text);
}
------------------运行程序图
------------这些小问题百度都一大堆。。。。。。。。
------解决思路----------------------
1. A可以直接暴露ListBox,例如在你的vs的窗体属性窗口中将对应的ListBox设置为public的,这样就可以从B直接访问A。
2. A是子窗体,设计的思想是“屏蔽对其它窗体的依赖关系”,也就是A中绝不访问B。A其实就是一个服务,它抛出一个“事件通知”来通知自己的宿主程序“ListBox已经改变”。你可以让你的A实现 INotifyPropertyChanged 接口,来向外界抛出属性修改的通知。
3. B在创建A的实例之后,监听此窗口的“PropertyChanged事件”。当判断此事件是通知ListBox修改的时候,就读取ListBox,并且更改自己的ListBox。
因此设计的原则是,这个“将A里面ListBox里面的值传给B里面的ListBox”根本就是不符合“低耦合”逻辑的。你应该在设计时就该为“B监听到A中ListBox修改,则自动读取A中的ListBox来更新自己的ListBox”,这个设计才更能保证你的程序将来扩展起来会干净简洁。
------解决思路----------------------
慢慢来,加油吧。我以前也遇过这种问题。看细点
现在有子窗体A和主窗体B,在A和B里分别有一个ListBox,现在要将A里面ListBox里面的值传给B里面的ListBox,具体应该怎么做呢?急!在网上查过很多资料,尝试过,还是没成功,搞不清楚到底是要怎么传?最好是给出具体的代码
------解决思路----------------------
http://bbs.csdn.net/topics/390128592
------解决思路----------------------
这方面的资料网上早已经一大把了,
请参考http://www.cnblogs.com/tomin/archive/2009/02/25/1397677.html
------解决思路----------------------
form1中的textbox1的modifilers设为Public,
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog(this);
}
form2:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Form1 f1 = (Form1)this.Owner;
f1.textBox1.Text = listBox1.SelectedItem.ToString();
}
------解决思路----------------------
最简单的,构造函数传值。
自定义一个类 class1,存储你要传的变量值。
在新窗体的构造函数中,把class1作为构造函数的参数。这总明白了吧。
第三种方法:用构造函数
在窗体Form2中
int value1;
string value2;
public Form2 ( int value1 , string value2 )
{
InitializeComponent ( );
this.value1 = value1;
this.value2 = value2;
}
在窗体Form1中这样调用
new Form2 ( 111 , "222" ).Show ( );
这样就把111,"222",这2个值传送给了Form2
但是这样的传值是单向的
------解决思路----------------------
--------------------------------------------------------------------
对于新手而言,,上图上代码直观,毕竟也是走过的路。。
-------------------
-----主窗体B代码
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(listBox1);
f2.ShowDialog();
}
------子窗体A代码
public Form2()
{
InitializeComponent();
}
ListBox lstbox2;
public Form2(ListBox lstbox1)
{
lstbox2 = lstbox1;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
lstbox2.Items.Add(listBox1.Text);
}
------------------运行程序图
------------这些小问题百度都一大堆。。。。。。。。
------解决思路----------------------
1. A可以直接暴露ListBox,例如在你的vs的窗体属性窗口中将对应的ListBox设置为public的,这样就可以从B直接访问A。
2. A是子窗体,设计的思想是“屏蔽对其它窗体的依赖关系”,也就是A中绝不访问B。A其实就是一个服务,它抛出一个“事件通知”来通知自己的宿主程序“ListBox已经改变”。你可以让你的A实现 INotifyPropertyChanged 接口,来向外界抛出属性修改的通知。
3. B在创建A的实例之后,监听此窗口的“PropertyChanged事件”。当判断此事件是通知ListBox修改的时候,就读取ListBox,并且更改自己的ListBox。
因此设计的原则是,这个“将A里面ListBox里面的值传给B里面的ListBox”根本就是不符合“低耦合”逻辑的。你应该在设计时就该为“B监听到A中ListBox修改,则自动读取A中的ListBox来更新自己的ListBox”,这个设计才更能保证你的程序将来扩展起来会干净简洁。
------解决思路----------------------
慢慢来,加油吧。我以前也遇过这种问题。看细点