我有树形式和哈希表。哈希表是在form1中创建的。如何从form3访问哈希表值。
f1.hash[txtUpNumber.Text] = " "+txtUpName.Text +"/"+ txtUpGrade.Text +"/"+ txtUpLGrade.Text;
我使用此代码并且没有错误,但哈希表值为null。
public Form2 f2;
public Form1 f1;
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
}
public void disp(ListViewItem each)
{
txtUpNumber.Text = each.SubItems[0].Text;
txtUpName.Text = each.SubItems[1].Text.TrimStart();
txtUpGrade.Text = each.SubItems[2].Text;
txtUpLGrade.Text = each.SubItems[3].Text;
}
private void btnUpdate_Click(object sender, EventArgs e)
{ try
{
f1.hash[txtUpNumber.Text] = " "+txtUpName.Text +"/"+ txtUpGrade.Text +"/"+ txtUpLGrade.Text; //update hashtable
this.Hide();
Form2 f2 = new Form2();
f2.ShowDialog();
}catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
首先我用listviewitems填充数据,然后从文本框中获取哈希表的信息。 我没有看到错误,但f1.hash为空? 这是form1中的哈希表创建。
public Hashtable hash = new Hashtable();
答案 0 :(得分:1)
这就是发生的事情 -
因此,您必须向Form3传递相关的参考资料,并且有几种方法可以做到 -
在Form3的构造函数中传递对字典或Form1的引用。
public Form3(Form1 p_form1)
{
f1 = p_form1;
}
将字典定义为Form1的静态成员。这样做很简单,但这是一个糟糕的设计,例如它不允许您创建Form1的多个实例。然后你就可以像下面那样简单地访问它,你不需要你的f1成员变量
Form1.hash[txtUpNumber.Text] = " "+txtUpName.Text +"/"+ txtUpGrade.Text +"/"+ txtUpLGrade.Text;
您还可以传递一个Delegate,它将在Form3构造函数中查找字典中所需的值。
答案 1 :(得分:0)
我认为你的问题可能是从另一个表单传递值的正确方法,这里有一个参考: update selected row in datagridview from another form