请看这个变量的值怎么没变呢?
public partial class Form1 : Form{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public string str = "刘德华";
private void button1_Click(object sender, EventArgs e)
{
str = "成龙";
Form2 form2 = new Form2();
form2.Show();
form2.Invalidate();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
Form1 form1 = new Form1();
private void Form2_Load(object sender, EventArgs e)
{
}
private void Form2_Paint(object sender, PaintEventArgs e)
{
MessageBox.Show(form1.str); //弹出来对话窗口怎么还是"刘德华"呢?
}
}
问题:
点击Button1的时候,str的值已经变成"成龙"了,为什么在Form2_Paint中弹出的对话窗口,str的值没有变呢?还是"刘德华"呢? --------------------编程问答-------------------- Form1 form1 = new Form1();你这里重新new了一个Form1,又没有触发这个新new的form的button1_Click事件,字符串的值当然不会改变。 --------------------编程问答-------------------- 比如张三和李四各有3元钱。。张三被你抢了1元。。然后你说李四有多少钱? --------------------编程问答-------------------- 实例整错啦~~请看修改后的
--------------------编程问答-------------------- 一般情况下,不会将Form1赋值给Form2的Tag属性。如果是我写的话,会这样
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public string str = "刘德华";
private void button1_Click(object sender, EventArgs e)
{
str = "成龙";
Form2 form2 = new Form2();
form2.Tag = this;
form2.Show();
form2.Invalidate();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
//Form1 form1 = new Form1();
private void Form2_Load(object sender, EventArgs e)
{
}
private void Form2_Paint(object sender, PaintEventArgs e)
{
MessageBox.Show((this.Tag as Form1).str); //用之前创建的Form1的实例就OK了,新new的肯定是初值
}
}
--------------------编程问答--------------------
实例整错啦~~请看修改后的
[code=C#]
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public string str = "刘德华 ";
private void button1_Click(object sender, EventArgs e)
{
str = "成龙 ";
Form2 form2 = new Form2(this);
form2.Show();
form2.Invalidate();
}
}
public partial class Form2 : Form
{
Form1 form1;
public Form2()
{
InitializeComponent();
}
public Form2(Form1 frm) : this()
{
this.= frm;
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void Form2_Paint(object sender, PaintEventArgs e)
{
MessageBox.Show(form1.str); //用之前创建的Form1的实例就OK了,新new的肯定是初值
}
}
请问:
public Form2(Form1 frm) : this() //这句怎么解释 {
this.= frm; //这种写法怎么解释
}
还第一次看到这些写法!!赞一个,麻烦解释一下,学学 --------------------编程问答-------------------- this关键字
其用于引用类的当前实例,也包括继承而来的方法,通常可以隐藏this,MSDN中的小结功能主要包括:
• 限定被相似的名称隐藏的成员
• 将对象作为参数传递到其他方法
• 声明索引器 --------------------编程问答-------------------- 1楼正解 --------------------编程问答-------------------- 1楼的就是答案呢
楼主可以看看窗体之间传值的方法呢
有5种,应该能找到你需要的呢。
--------------------编程问答-------------------- 两个form之间传值问题。form2中重新实例化的form1的buttonclick事件还没被触发呢 --------------------编程问答--------------------
正解 --------------------编程问答--------------------
--------------------编程问答-------------------- --------------------编程问答--------------------
private void button1_Click(object sender, EventArgs e)
{
str = "成龙";
// 如果你把str传递到Form2,则会改变。。。。
Form2 form2 = new Form2(str);
form2.Show();
form2.Invalidate();
}
}
补充:.NET技术 , C#