单击按钮时如何在子窗体中刷新父窗体?

然后关闭子窗体正在运行此命令:

private void listView1_MouseDoubleClick(object sender, EventArgs e) { ListViewItem item = listView1.SelectedItems[0]; string s = item.SubItems[6].Text; q = m; CommercialOfferEditProperties ob = new CommercialOfferEditProperties(s, q); ob.FormClosed += new FormClosedEventHandler(ob_FormClosed); ob.Show(); //show child } void ob_FormClosed(object sender, FormClosedEventArgs e) { some action } 

但是如果在子窗体中点击按钮,如何运行动作ob_FormClosed或运行创建的新动作?

  1. 将OnClick事件添加到子窗体( CommercialOfferEditProperties
  2. 在父表单中订阅。
  3. 每次单击子窗体按钮时触发OnClick。

这样你就可以通知家长。

例:

 //Child form declaration public class CommercialOfferEditProperties:Form { public event EventHandler ButtonClicked; public void NotifyButtonClicked(EventArgs e) { if(ButtonClicked != null) ButtonClicked(this,e); } ... } 

家长表格:

 private void listView1_MouseDoubleClick(object sender, EventArgs e) { ListViewItem item = listView1.SelectedItems[0]; string s = item.SubItems[6].Text; q = m; CommercialOfferEditProperties ob = new CommercialOfferEditProperties(s, q); ob.FormClosed += new FormClosedEventHandler(ob_FormClosed); ob.ButtonClicked += new EventHandler(ob_ButtonClicked); ob.Show(); //show child } void ob_FormClosed(object sender, FormClosedEventArgs e) { //process form close } void ob_ButtonClicked(object sender, EventArgs e) { //process button clicked } 

您可以将该按钮声明为公共或(更好)创建一个公开显示按钮的只读属性。

 public Button TheButton { get { return button1; } } 

然后呢

 ob.TheButton.Clicked += new .... 

我相信你试图在错误的位置执行此操作…但是,实现你想要的唯一方法是将父控件传递给构造函数中的子控件或将其设置为属性(两者的BAD IDEA,for不同的原因)或者您可以添加父表单注册的事件。 然后调用Parent.Refresh()方法。

您应该有一些类似于父窗体的代码:

 ChildDialog dialog = new ChildDialog(); dialog.ShowDialog(this); 

您可以添加以下代码:

 if(dialog.DialogResult = DialogResult.OK) { this.Refresh(); } 

注意:Dialog.OK可能需要根据子窗体的对话框结果进行更改。