大家好,在winforms中如何实现窗体间的传值??
我听网友说,通过PUBLIC参数就可以了,但是我试了多次都没成功。我做了两个窗体
一个是form1,上面有一个combox1(含teacher,student两个编辑项),还有一个登陆按钮
代码如下:
namespace session
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string xiaoname;
public string customername
{
get
{
return(xiaoname);
}
set
{
xiaoname=value;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (comboBox1.Text == "teacher")
{
Form2 fm2 = new Form2();
fm2.Show();
}
if (comboBox1.Text == "student")
{
Form2 fm2 = new Form2();
fm2.Show();
}
this.customername = (string)comboBox1.ValueMember;
}
}
}
还有一个窗体就是form2,只含有一个标签 label,显示form1中combox的选项(即身份),但是显示不了,不知道哪里错了,请大家帮忙看看,代码如下:
namespace session
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
Form1 fm1 = new Form1();
label1.Text = fm1.customername;
}
}
}
--------------------编程问答--------------------
private void Form2_Load(object sender, EventArgs e)
{
label1.Text = (((Form1)this.Owner).Controls["comboBox1"] as System.Windows.Forms.ComboBox).Text;
}
楼主需要注意的是:Form1 fm1 = new Form1();
label1.Text = fm1.customername; 这种写法相当于重新建了个Form,而不是你打开的那个Form1
因此值是不会有的。(Form1)this.Owner) 这样得到的是父窗体,这个才是你第一次打开的窗体! --------------------编程问答-------------------- Form2 改为:
namespace session
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private string customername;
public string CustomerName
{
get {return this.customername;}
set{this.CustomerName=this.customername}
}
private void Form2_Load(object sender, EventArgs e)
{
label1.Text = this.customername;
}
}
} --------------------编程问答-------------------- Form1 改为;
namespace session
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string xiaoname;
public string customername
{
get
{
return(xiaoname);
}
set
{
xiaoname=value;
}
}
private void button1_Click(object sender, EventArgs e)
{
Form2 fm2 = new Form2();
fm2.CustomerName =(string)comboBox1.ValueMember;
fm2.Show();
}
}
} --------------------编程问答-------------------- 你思路反了 --------------------编程问答-------------------- 请问上面2位的代码都能成功的运行吗??? --------------------编程问答-------------------- 当然可以。你试试 就晓得 --------------------编程问答-------------------- 不想用xray2005的方法,因为我还要弹出许多其他的窗口,所以我想使用ouc_ajax的方法。可惜的是代码输入进去无法运行,请大家在帮忙看看!! --------------------编程问答-------------------- 谢谢xray2005!!! --------------------编程问答-------------------- 你可以在Form2中添加一个字段:
private Form1 fm1;
然后在Form2的构造函数中写:
public Form2(Form1 fm1)
{
InitializeComponent();
this.fm1 = fm1;
}
然后在Form1的button时间里这么调用:
if (comboBox1.Text == "teacher")
{
Form2 fm2 = new Form2(this);
fm2.Show();
}
这样你就可以直接在Form2中
private void Form2_Load(object sender, EventArgs e)
{
//Form1 fm1 = new Form1(); //注意这行已经被注释,不需要创建新的Form1实例.
label1.Text = fm1.customername;
}
--------------------编程问答-------------------- 路过 --------------------编程问答--------------------
怎么无法运行了??
忘了说了,Form1中改成
Form2 fm2 = new Form2();
fm2.Show(this); //也就是表示这是弹出窗体Form1的父窗体
这样再在Form2中调用
label1.Text = (((Form1)this.Owner).Controls["comboBox1"] as System.Windows.Forms.ComboBox).Text; --------------------编程问答-------------------- 参考:
http://blog.csdn.net/mngzilin/archive/2010/01/01/5118256.aspx --------------------编程问答-------------------- 直接这样改
Form2 fm2 = new Form2();
fm2.Show(this);
ouc_ajax改的比较实惠,不错,谢谢楼上各位热心的朋友!!! --------------------编程问答-------------------- -。- 搞不懂说啥呢
我理解这样 2个FORM 然后 你点 一个按钮 然F2弹出来 在点F1上的按钮 让F2的label.Text 改变?
public Form1()
{
InitializeComponent();
}
Form2 f2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
f2.Show();
}
private void button1_Click_1(object sender, EventArgs e)
{
f2.label1.Text = this.textBox1.Text;
}
这是F1代码 你给F2的label1 改成public 就OK了 最简单了
再不然 就用 构造函数传过去 --------------------编程问答-------------------- 我觉得用构造函数传值很容易实现啊,窗体之间传值就是类之间传参啊,一个窗体生成另一个窗体时给她传上参数
var form=new Form2(参数,参数………………);
form.ShowDialog(this); --------------------编程问答-------------------- xray2005
你好
你做的方法让人看的头昏
我试了一下,也不行 --------------------编程问答-------------------- 用构造函数传值比较简单,如果嫌麻烦,用静态属性更简单啊 --------------------编程问答-------------------- public static string temp;声明一个静态属性 --------------------编程问答--------------------
同意 --------------------编程问答--------------------
补充:.NET技术 , C#