参数不能在c#事件之间共享
本文关键字:之间 共享 事件 不能 参数 | 更新日期: 2023-09-27 18:06:19
我正在尝试使用数据选择器和按钮控制表单。
public void DataSelector_SelectedIndexChanged(object sender, EventArgs e) {
switch (DataSelector.SelectedIndex) {
case 0:
byte[] param1 = {
0x00, 0x01
};
//some code here
break;
case 1:
byte[] param1 = {
0x00, 0x02
};
//some code here
break;
}
}
private void button1_Click(object sender, EventArgs e) {
Dictionary < string, object > postParameters = new Dictionary < string, object > ();
postParameters.Add("param1", param1);
}
然而,这给了我错误消息,param1不存在于当前上下文中。我已经尝试声明param1公共,它的ok外声明为
public byte[] param1={0x00,0x01};
但是当我在Datasector事件中设置param1={0x00,0x02};
时,它说语法错误,缺少表达式项{,
在button1点击事件中添加DataSelector_SelectedIndexChanged(sender, e);
也没有帮助…
要在两个不同的方法之间共享一个值,要么使用类级别的字段,要么不使用两个不同的方法。
标准的方法是使用字段。你的代码应该是这样的:
private Dictionary<string, object> postParameters = null;
private byte[] param1 = null;
private void DataSelector_SelectedIndexChanged(object sender, EventArgs e)
{
switch (DataSelector.SelectedIndex)
{
case 0:
param1 = new byte[] { 0x00, 0x01 };
//some code here
break;
case 1:
param1 = new byte[] { 0x00, 0x02 };
//some code here
break;
}
}
private void button1_Click(object sender, EventArgs e)
{
postParameters = new Dictionary<string, object>();
postParameters.Add("param1", param1);
}
这很好,但这确实意味着您必须管理可能被代码的其他部分操作的字段。
现在最好使用匿名方法将所有的逻辑封装在一个方法中。
你的代码可以像这样:
private void Form1_Load(object sender, EventArgs e)
{
Dictionary<string, object> postParameters = null;
byte[] param1 = null;
DataSelector.SelectedIndexChanged += (ss, ee) =>
{
switch (DataSelector.SelectedIndex)
{
case 0:
param1 = new byte[] { 0x00, 0x01 };
//some code here
break;
case 1:
param1 = new byte[] { 0x00, 0x02 };
//some code here
break;
}
};
button1.Click += (ss, ee) =>
{
postParameters = new Dictionary<string, object>();
postParameters.Add("param1", param1);
};
}