2014-09-04 40 views
0
  • Form1中我有一個GUI按鈕挑傳值
  • 窗口2是我的datagridview
  • form3是我輸入名字姓和MI
  • 我的代碼Form1將form2.show
  • 在我的窗口2是form3.show
  • 我有一個form3代碼,使用一個計數器輸入datagridView1
private void btnAdd_Click(object sender, EventArgs e) 
      { 
       int counter = 0; 
       if (dataGridView1.Rows.Count > 1) 
       { 
        while (counter != dataGridView1.Rows.Count - 1) 
        { 
        if (dataGridView1.Rows[counter].Cells[0].Value.ToString() ==txtName.Text) 
        { 
         MessageBox.Show("name already exist"); 
         return; 
        } 
        counter++; 
       } 
      } 
if (txtName.Text == "") 
      { 
       MessageBox.Show("name field should not be empty"); 
       return; 
      } 
else 
      { 
       dataGridView1.Rows.Add(txtName.Text); 
      } 
  • 我的問題是,form3不承認dataGridView1如何獲得文本框的值form3到的datagridview在窗口2。
+0

首先,爲'form3'調用'Show'而不是'ShowDialog'是否有意義?通常情況下,你會打開對話框,用戶輸入數據,對話框關閉,然後在調用者中使用數據,即在這種情況下使用'form2'。這是它應該如何在你的情況下工作? – jmcilhinney 2014-09-04 03:20:33

+0

你如何做到這一點?對不起,目前在c新# – 2014-09-04 03:27:31

+0

我問了一個問題,我問它的原因。請提供答案。一旦我有了這些信息,我將能夠就如何繼續爲您提供建議。 – jmcilhinney 2014-09-04 03:47:08

回答

-1

Reference of DataGridView傳遞給form 3

第1步:創建過載構造函數form3

DataGridView dg; 

public Form3(ref DataGridView dgv) 
{ 
    InitializeComponent(); 
    dg=dgv; 
} 

第2步:從窗體2,如何調用,傳入form3 constructorform2 datagridview reference ...

form3 frm = new form3(ref datagridview1); 
frm.show(); 

第3步:你Form3代碼..

 private void btnAdd_Click(object sender, EventArgs e) 
    { 
     int counter = 0; 
     if (dg.Rows.Count > 1) 
     { 
      while (counter != dg.Rows.Count - 1) 
      { 
       if (dg.Rows[counter].Cells[0].Value.ToString() ==txtName.Text) 
       { 
         MessageBox.Show("name already exist"); 
         return; 
        } 
        counter++; 
      } 
     } 
     if (txtName.Text == "") 
     { 
      MessageBox.Show("name field should not be empty"); 
      return; 
     } 
     else 
     { 
      dg.Rows.Add(txtName.Text); 
     } 
    } 
+0

雖然有效,但這是一個糟糕的主意,因爲它將兩種形式結合得比必要的要緊得多。收集數據的對話不得不關心數據如何在以後使用。如果您決定要將其他數據與其他數據配合使用,則必須對這兩種表單進行重大更改。如果你讓對話簡單地暴露數據並讓調用者決定如何使用它,那麼這樣的改變對對話的影響就是零,這就是它應該如何改變的。 – jmcilhinney 2014-09-04 04:27:38

+0

另外,通過參考對話來傳遞網格的原因是什麼?你是否在構造函數中分配了不同的對象和帽子參數?這是聲明參數'ref'的唯一有效理由,因爲你不這樣做,所以不要使用'ref'。 – jmcilhinney 2014-09-04 04:29:12

+0

另外,你爲什麼會重載構造函數?如果你要像這樣傳遞網格,那麼這將是唯一的構造函數。如果你仍然有一個沒有參數的構造函數,那麼如果它被使用會發生什麼? 'NullReferenceException'是什麼。 – jmcilhinney 2014-09-04 04:36:39

0

如果對話正在打開,輸入數據,然後對話框關閉,則根本不應該調用Show。您應該調用ShowDialog,將該窗體顯示爲模態對話框。在這種情況下,調用者可以在顯示對話之前通過設置屬性或傳遞方法參數將數據傳遞到對話中,然後通過獲取屬性或獲取方法返回值來獲取數據。然後由調用者根據數據來做它想要的,這意味着你的form2可以填充它自己的網格。

E.g.

using (var dialogue = new Form3()) 
{ 
    // Pass data in as required. 
    dialogue.SomeProperty = someValue; 

    // Display the dialogue... 
    if (dialogue.ShowDialog() == DialogResult.OK) 
    { 
     // ...and get data out if the user clicks OK. 
     someOtherValue = dialogue.SomeOtherProperty; 

     // Use data here. 
    } 
} 

這取決於你在對話框中定義合適的成員以公開你想要的數據。

+0

有關更完整的解釋,請查看:http://jmcilhinney.blogspot.com.au/2013/10/managing-data-among-multiple-forms-part.html。我建議先閱讀第一部分和第二部分,但第三部分是最重要的。 – jmcilhinney 2014-09-04 04:16:59

+0

任何教程如何使用對話框?nvm u比我早發佈 – 2014-09-04 04:20:59

+0

thnx但我只有20分鐘來介紹我的工作我會在閱讀你的博客之後,thnx幫忙。 – 2014-09-04 04:31:02

相關問題