winform 两个窗体的全局变量取值问题

cyly100 2012-10-09 08:22:11

public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}

public static int i = 0;

private void button1_Click(object sender, EventArgs e)
{
i++;
Form2 fm = new Form2();
fm.Show();
}
}



public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

public static int j = Form1.i;

private void Form4_Load(object sender, EventArgs e)
{
textBox1.Text = j.ToString();
}
}


点击Form1的button,form2显示1,关掉再点击还是1
.......


经过断点了解,form1没有问题i的值在不断增加,但是form2的 【public static int j = Form1.i】只执行一次,以后在不执行,怎么办?
...全文
193 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
_小黑_ 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
改成这样就行了:
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}

public int i = 0;

private void button1_Click(object sender, EventArgs e)
{
i++;
……
[/Quote]
去掉static
leafmao 2012-10-09
  • 打赏
  • 举报
回复
真是巧啊,我也是刚刚发现在自己写的程序里static成员只执行一次,然后查看MSDN的文档才明白的,静态成员只有一个副本,所以只执行一次,要想每次都执行,把static去掉就可以。
leafmao 2012-10-09
  • 打赏
  • 举报
回复
经过断点了解,form1没有问题i的值在不断增加,但是form2的 【public static int j = Form1.i】只执行一次,

我刚搞明白这个问题,根本原因是:无论对一个类创建多少个实例,它的静态成员都只有一个副本
所以它只执行一次,其实方法很简单,只要把static去掉就可以,改成public int j=Form1.i,这样每次实例化FORM2的时候就会执行了
Hauk 2012-10-09
  • 打赏
  • 举报
回复

private void button1_Click(object sender, EventArgs e)
{
//i++;
//Form2.j++;
Form2.j = ++i;
Form2 fm = new Form2();
fm.Show();
}
Hauk 2012-10-09
  • 打赏
  • 举报
回复

public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}

public static int i = 0;

private void button1_Click(object sender, EventArgs e)
{
i++;
Form2.j++;
Form2 fm = new Form2();
fm.Show();
}
}




public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

public static int j = 0;

private void Form4_Load(object sender, EventArgs e)
{
textBox1.Text = j.ToString();
}
}
新月815 2012-10-09
  • 打赏
  • 举报
回复
C# code
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}

public static int i = 0;

private void button1_Click(object sender, EventArgs e)
{
i++;
Form2 fm = new Form2();
fm.Show();
}
}




C# code
public partial class Form2 : Form
{
public static int j;
public Form2()
{
InitializeComponent();
j = Form1.i;
}

private void Form2_Load(object sender, EventArgs e)
{
textBox1.Text = j.ToString();
}
}



快溜 2012-10-09
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
i++;
Form2 fm = new Form2();
From2.j=i;
fm.Show();
}
Trent1985 2012-10-09
  • 打赏
  • 举报
回复
我只给你解决了form2中j值变化的问题,别的都是你自己的代码阿!
cyly100 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
改成这样就行了:
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}

public int i = 0;

private void button1_Click(object sender, EventArgs e)
{
i++;
……
[/Quote]

这样动代码量也是很大的
Trent1985 2012-10-09
  • 打赏
  • 举报
回复
改成这样就行了:
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}

public int i = 0;

private void button1_Click(object sender, EventArgs e)
{
i++;
Form2 fm = new Form2(i);
fm.Show();
}
}
public partial class Form2 : Form
{
public Form2(int m)
{
InitializeComponent();
j=m;
}

public int j =0;

private void Form2_Load(object sender, EventArgs e)
{
textBox1.Text = j.ToString();
}
}


cyly100 2012-10-09
  • 打赏
  • 举报
回复
我主要想问问为什么会这样,能不能让它执行。解决也好办,放到formload里,没事了。但是代码量太大了,麻烦!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧