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

时间:2011-09-13 18:19:47

标签: c# winforms

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

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或运行已创建的新操作?

3 个答案:

答案 0 :(得分:6)

  1. 向您的子表单(CommercialOfferEditProperties
  2. 添加OnClick事件
  3. 以父表格订阅。
  4. 每次单击子窗体按钮时触发OnClick。
  5. 这样你就可以通知家长了。

    示例:

    //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
            }
    

答案 1 :(得分:2)

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

public Button TheButton { get { return button1; } }

然后再做

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

答案 2 :(得分:0)

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

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

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

您可以添加以下代码:

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

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