2013-12-22 84 views
0

我有樹形式和一個hashtable.Hashtable創建form1.How我可以從form3訪問hashtable值。如何從其他表單訪問哈希表值?

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

f1是f3的成員變量嗎?你如何獲得f1? – Jite

+0

請提供更多信息。 –

+0

我dıdnt從form1.I更新我的問題。 – user3096551

回答

1

這是發生了什麼 -

  1. 你有一個字典中定義的字典
  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. 您可以將字典存儲在某個可供兩個表單訪問的位置,在某些其他類中。