2011-05-08 30 views
1

我在Form1一個DataGridView,我使用此代碼顯示另一種形式叫做Generator通話變量c#

private void button1_Click(object sender, EventArgs e) 
{ 
    Form gen = new Generator(); 
    // Form gen = new Generator(Form this); //* I tried this but is not working *// 
    gen.Show(); 
} 

Generator形式,我需要讀取或修改的東西在DataGridView這是在Form1

public partial class Generator : Form 
{ 
    public Form myForm; 

    public Generator() 
    { 
     InitializeComponent(); 
    } 

    public Generator(Form frm) 
    { 
     myForm = frm; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     myForm.mydatagridview.! // this is not working 
    } 
} 

我怎樣才能解決這個問題,所以我可以從Generator形式操縱DataGridView

謝謝。

+0

發生器上myForm的類型是什麼?讓它成爲類型Form1 – ariel 2011-05-08 14:45:01

回答

4

表1:

private void button1_Click(object sender, EventArgs e) 
{ 
    Form gen = new Generator(this.mydatagridview); 
    gen.Show(); 
} 

發電機形式:

DataGridView _dataGridView; 
public Generator(DataGridView dataGridView) 
{ 
    InitializeComponent(); 
    this._dataGridView = dataGridView; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    this._dataGridView...! // this will work 
} 

的事情,你必須做,並且知道(只是技巧,你不會被強迫做這些,但我相信你會一個更好的程序員,如果你這樣做;)

總是在所有窗體構造函數中調用InitializeComponent()。在你的示例中,你沒有在其中一個構造函數中調用它。

C#只知道您傳遞的類型的信息。如果你傳遞一個表單,那麼你只能得到表單屬性(即表單類型的屬性),而不是你自己表單的屬性。

嘗試封裝的東西。不要將整個表單傳遞給另一個表單。相反,傳遞你想在其他表單上使用的東西。

+0

非常謙虛的傢伙和明智的建議 – 2012-04-06 05:16:00

+0

很高興「聽到」......謝謝!我只是一個人,試圖成爲一個好人。 – 2012-04-06 23:29:02

0

這裏有一些事情正在進行。

  1. 您必須使用構造函數Generator,該構造函數以表單形式作爲參數。
  2. 您必須將datagridview作爲公共或內部屬性公開或傳遞到Generator中。
  3. 正常的Form類將不知道這個屬性,所以你應該適當地施放變量。
  4. 當使用其他構造函數確保所有內容都已正確初始化時,您應該調用Generator的默認構造函數。查看下面的代碼示例。

像這樣的東西應該工作:

public class Generator 
{ 
    private MyForm myForm; 

    public Generator() 
    { 
     InitializeComponent(); 
    } 

    public Generator(MyForm frm) : this() // DON'T FORGET THIS() 
    { 
     myForm = frm; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     myForm.MyDataGridView... // Yay, it works! 
    } 
} 

public class MyForm : Form 
{ 
    public MyForm() 
    { 
     InitializeComponent(); // a datagridview is created here, say "datagridview1" 
    } 

    public DataGridView MyDataGridView 
    { 
     get { return datagridview1; } 
    } 
} 

,然後在按鈕的Click事件(我假設在MyForm某處定義):

private void button1_Click(object sender, EventArgs e) 
{ 
    Form gen = new Generator(this); 
    gen.Show(); 
} 
0

最簡單的方法從有在Form1上打開DataGridView(myDataGridView)的設計器,並將Modifiers屬性從private設置爲internalpublic

這會讓你從發生器窗體調用myForm.myDataGridView