C# 不同From间变量传递问题

.Net技术 码拜 4年前 (2017-04-25) 474次浏览
    本人在网上搜查了一些两个Form之间传递变量值的方法,其中有一种方法是设置全局变量,本人尝试了一下,遇到问题如下:
1、在Form1中定义的ReceiveData数组为全局变量
public static byte[] ReceiveData = new byte[1024 * 2]
其它函数会修改ReceiveData的值;
2、在Form2中添加了2个Text控件用于显示全局变量的值,在Form2_Load()函数中添加代码如下
textBox_TrainNum.Text = “23”;
textBox_LineNum.Text = Form1.ReceiveData[0].ToString();
调试显示Text-LineNum为0,Text-TrainNum为23,实际ReceiveData[0] = 18;
本人觉得Form2_Load()函数是执行了,但是为什么全局变量的值传递不过去呢?
3、本人在From2中再添加了一个Button控件,在button_click()函数中添加同样代码
textBox_LineNum.Text = Form1.ReceiveData[0].ToString();
此时Text-LineNum为18,赋值正常;
4、是什么原因造成了前后两次结果不一样?有些困惑
解决方案

10

不应该啊,你代码放出来看一下。本人实测是一样的。
form1代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static byte[] aaa = new byte[20];
private void Form1_Load(object sender, EventArgs e)
{
aaa[18] = 18;
Form2 f2 = new Form2();
f2.Show();
}
}
form2代码
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
MessageBox.Show(((int)Form1.aaa[18]).ToString());
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(((int)Form1.aaa[18]).ToString());
}
}

10

你应该是只是new了一个数组public static byte[] ReceiveData = new byte[1024 * 2],但是并没有给它赋值,而里面的默认值应该都是0,所以你在Load函数里面显示的值是0,而当你在另外一个Form中点击按钮后,在这之前数组应该是被你赋值了,所以是18。
因此问题的根本原因在于你能否在Load函数里面执行textBox_LineNum.Text = Form1.ReceiveData[0].ToString();之前给ReceiveData[0]赋值了。

10

其它函数会修改ReceiveData的值;
修改这个值有个先后.
假如是在load之前,那这个值肯定是空的.
假如是在load之后,那这个值就会有.

10

专业的开发人员,学习的是组件开发知识;业余的开发者可能最多只考虑到“第一次使用Form”的问题。
例如说你编写Form,那么专业的开发者他的文章中就把Form(或说这两个Form)作为随时可以调用的服务,也就是说整个系统中不一定只有2个Form,而是可以有3个、4个、6个、8个……..
此时,使用“全局变量”随便用想想就知道是冲突数据制造乱象,落入泥潭了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# 不同From间变量传递问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)