繁体   English   中英

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

[英]How to refresh parent form when in child form is button clicked?

然后关闭子窗体正在使用此命令:

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 或(更好)创建一个只读属性公开您的按钮。

public Button TheButton { get { return button1; } }

然后做

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

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

您应该有一些类似于父表单中的代码:

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

您可以添加以下代码:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM