从另一个表单调用表单中的按钮

时间:2016-03-20 14:33:50

标签: c# winforms

我有两个表单,Form1和Form 2.我需要从Form2访问Form1中的按钮,以刷新Form1中的datagridview

这是Form1:

private void BookLoad()
    {
        DataSet d = new DataSet();
        SqlCommand com = new SqlCommand("select * from Books  ", cn);
        SqlDataAdapter da = new SqlDataAdapter(com);
        da.Fill(d, "Books");
        dataGridView2.DataSource = d;
        dataGridView2.DataMember = "Books";

        DataSet ds = new DataSet();
        SqlCommand cmd = new SqlCommand("select * from Issue where StudentNumber LIKE @number", cn);
        cmd.Parameters.AddWithValue("@number", textBox1.Text);
        da = new SqlDataAdapter(cmd);
        da.Fill(ds, "Issue");
        dataGridView1.DataSource = ds;
        dataGridView1.DataMember = "Issue";

        DataSet dss = new DataSet();
        SqlCommand cmdd = new SqlCommand("select Books_Borrowed,Date_Borrowed,Return_Date,Quantity from Issue where StudentNumber = @number", cn);
        cmdd.Parameters.AddWithValue("@number", textBox1.Text);
        da = new SqlDataAdapter(cmdd);
        da.Fill(dss, "Issue");
        dataGridView3.DataSource = dss;
        dataGridView3.DataMember = "Issue";

    }


   private void button2_Click(object sender, EventArgs e)
    {
      Form2 form = new Form2();
      form.Show();
    }


    private void button10_Click(object sender, EventArgs e)
    {
       BookLoad();
       MessageBox.Show();
    }

我需要从Form2

访问button10

3 个答案:

答案 0 :(得分:1)

首先,在使用Hide()Show()时要小心谨慎,当表单不可见时,很少有东西可能无法正常工作。

实现功能的理想解决方案,在Form2中定义事件并在Form1订阅该事件

按照指定在Form2中声明委托(在Form2中保留此逻辑)

public delegate void Listen(object sender, EventArgs args);

// Expose the event off your component
public event Listen ListenChange;

在隐藏表单之前,将此逻辑保留在Button_Click中的Form2事件中。

// And to raise it
if (ListenChange != null)
{
   ListenChange(this, new EventArgs());
}

现在在Form1订阅此活动并提出更改。

Form2 form = new Form2();
form.ListenChange += (s, ev) => button10.PerformClick();
form.Show();

答案 1 :(得分:0)

似乎Form2是某种编辑对话框。 真的不应该访问Form1上的控件。

更简单的事情是使用Form2方法打开ShowDialog()作为模态(使用Show方法,多次单击Form2时可以打开多个button2

private void button2_Click(object sender, EventArgs e)
{
  Form2 form = new Form2();
  DialogResult r = form.ShowDialog();
  if (r == DialogResult.OK)
  {
      BookLoad();
      MessageBox.Show();
  }
}

答案 2 :(得分:-1)

这不是一个好方法,但如果你想这样做,请在Form1中添加一个静态函数:

public static void btnDown(){
    SomeButton.Invoke();
}

现在从Form2调用此函数,如

Form1.btnDown();