2017-08-04 28 views
0

我有一個按鈕和麪板的這種形式。當我按下按鈕,我想添加一行到dataGridView1如何從用戶控件添加行到dataGridView

enter image description here

用戶控件代碼:

public partial class UserControl1 : UserControl 
{ 
    private static UserControl1 _instance; 
    public static UserControl1 Instance 
    { 
     get 
     { 
      if (_instance == null) 
       _instance = new UserControl1(); 
      return _instance; 
     } 
    } 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 
    public void setRow() 
    { 
     String[] row = { "TEST", "TEST", "TEST", "TEST" }; 
     dataGridView1.Rows.Add(row); 
    } 
} 

Form 1代碼:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     panel1.Controls.Add(new UserControl1()); 
     UserControl1.Instance.Dock = DockStyle.Fill; 
     UserControl1.Instance.BringToFront(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 


    private void button1_Click(object sender, EventArgs e) 
    { 
     UserControl1 user = new UserControl1(); 
     user.setRow(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 

    } 
} 
+0

爲什麼在按鈕點擊事件中創建UserControl1的新實例?調用''UserControl1.Instance.setRow();''而不是 –

+0

來訪問UserControl1中的方法setRow() –

+0

否...要在Form1中顯示UserControl,您要在構造函數中創建實例...使用'panel1.Controls .Add(new UserControl1());'' –

回答

0
private void button1_Click(object sender, EventArgs e) 
{ 
    UserControl1 user = new UserControl1(); 
    user.setRow(); 
} 

應該是

private void button1_Click(object sender, EventArgs e) 
{ 
    UserControl1.Instance.setRow(); 
} 

和構造的UserControl1應該像

public UserControl1() 
{ 
    _instance = this; 
    InitializeComponent(); 
} 

在你的代碼創建你的用戶控件的3個實例,它看起來像你想只有一個。當你在其中一個實例上調用方法時,它不會影響其他實例。