【问题标题】:How to access hashtables value from another forms?如何从其他形式访问哈希表值?
【发布时间】:2013-12-22 20:44:44
【问题描述】:

我有一个树形表和一个哈希表。哈希表是在 form1 中创建的。我如何从 form3 访问哈希表值。

f1.hash[txtUpNumber.Text] = " "+txtUpName.Text +"/"+ txtUpGrade.Text +"/"+ txtUpLGrade.Text;

我使用这段代码,没有错误,但哈希表值为空。

    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();

【问题讨论】:

  • f1是f3的成员变量吗?你是怎么得到 f1 的?
  • 请提供更多信息。
  • 我没有从 form1 中获取哈希表。我更新了我的问题。

标签: c# winforms hashtable


【解决方案1】:

这就是发生的事情 -

  1. 您在 Form1 中定义了一个字典
  2. 它已初始化,您可能会将值放入您使用的 Form1 的某些实例中。
  3. 您的 Form3 实例包含对某些(已初始化或未初始化)Form1 实例的引用,但它不是同一个实例。

因此,您必须将相关引用传递给您的 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. 您还可以传递一个委托,它将在 Form3 构造函数中的字典中查找您需要的值。

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

【讨论】:

    【解决方案2】:

    我认为您的问题可能是从另一种形式传递值的正确方法,这里是您的参考: update selected row in datagridview from another form

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 2020-03-27
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多