如何从其他表单访问哈希表值?

时间:2013-12-22 09:59:04

标签: c# winforms hashtable

我有树形式和哈希表。哈希表是在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();

2 个答案:

答案 0 :(得分:1)

这就是发生的事情 -

  1. 您在Form1
  2. 中定义了字典
  3. 它已初始化,您可能会将值放在与您一起工作的Form1的某个实例中。
  4. 您的Form3实例包含对Form1的某些(已初始化或未初始化)实例的引用,但它是相同的实例。
  5. 因此,您必须向Form3传递相关的参考资料,并且有几种方法可以做到 -

    1. 在Form3的构造函数中传递对字典或Form1的引用。

      public Form3(Form1 p_form1)    
      {
          f1 = p_form1;
      }        
      
    2. 将字典定义为Form1的静态成员。这样做很简单,但这是一个糟糕的设计,例如它不允许您创建Form1的多个实例。然后你就可以像下面那样简单地访问它,你不需要你的f1成员变量

      Form1.hash[txtUpNumber.Text] = " "+txtUpName.Text +"/"+ txtUpGrade.Text +"/"+ txtUpLGrade.Text;
      
    3. 您还可以传递一个Delegate,它将在Form3构造函数中查找字典中所需的值。

    4. 您可以将字典存储在两个表单都可访问的某个位置,在其他类中。

答案 1 :(得分:0)

我认为你的问题可能是从另一个表单传递值的正确方法,这里有一个参考: update selected row in datagridview from another form