2013-02-11 96 views
0

因此,在表單1中我有一個datagridview,並且當用戶想要編輯任何客戶端時,他選擇一個並單擊編輯按鈕...並出現一個新的窗口使用form1中的索引並將其用於form2

在新窗口中,我希望在文本框中1是客戶端的名稱,而2是文本框的地址。

這裏是在Form1

public void Clientesgrid_Cellclick(object sender, DataGridViewCellEventArgs e) 
    { 
     int index = clientesgrid.SelectedRows[0].Index; 
    } 

的代碼是不是有什麼我丟失在Form1?我怎樣才能把索引轉換成另一種形式?幫幫我。

回答

0

你必須以某種方式把它傳遞給第二個形式,像這樣的例子

public void Clientesgrid_Cellclick(object sender, DataGridViewCellEventArgs e) 
{ 
    form2.RowIndex = clientesgrid.SelectedRows[0].Index; 
} 
+0

那就是單程。或者,如果存在所有權鏈,則可以將索引設置爲屬性並引用'((form1)Owner).Index'。或者你可以把它作爲一個構造函數參數'new form2(Index);'來包含它。換句話說,除非你給form2訪問索引,否則form2不會訪問索引。 – Nevyn 2013-02-11 18:54:34

0

Form2上創建一個publicinternal屬性/字段

class Form2 
{ 
    internal int RowIndex; // or internal int RowIndex {get; set;} 
} 

這樣稱呼它

public void Clientesgrid_Cellclick(object sender, DataGridViewCellEventArgs e) 
{ 
    form2.RowIndex = clientesgrid.SelectedRows[0].Index; 
} 
1

最直接的方法可能是將其包含在Form2的構造函數。因此,在Form2你有這樣的事情:

public Form2(int clientID) 
{ 
    // Do something with the clientID 
    // Most likely set it to a property on Form2, or a private member. 
} 

然後在Form1當您創建的Form2一個實例可能是這個樣子:你想這個參數

var index = clientesgrid.SelectedRows[0].Index; 
var editForm = new Form2(index); 
editForm.Show(); 

理想作爲客戶端的標識符,而不是簡單地來自DataGridView的行索引Form1。原因是因爲如果它只是一個行索引,並且該行包含您需要的數據,那麼Form2不具備它所需的數據,它仍然依賴於Form1來獲取更多數據。

儘可能減少依賴關係。 Form2的任何實例都應該在構造函數中要求它爲了完成它的工作而需要的任何東西。然後,只要能夠提供所需的任何其他表單,就可以創建一個Form2的實例。

如果Form2總是需要這個標識符,那麼你可能需要額外的步驟,以它的參數的構造函數私人:

private Form2() { } 

這將防止其他形式從創建的Form2的實例,不需要提供必要的值它需要。

相關問題