我有两个表单,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答案 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();