将第二表单的回调方法添加到主表单上现有的按钮eventandler中



其实我有一个简单的问题。当我搜索时,我只发现答案略有不同。

我有一个包含用户输入控件的主表单。主表单也有一些控制按钮。一个是ShowPreview,一个是WorkOn。

单击"ShowPreview"后,一些检查将运行,如果OK,则用户的输入将被转移到另一个称为预览的表单,在那里输入将更美观地呈现。
双击预览表单,它就会关闭。但是用户可以通过点击主表单按钮"WorkOn"返回他或她的输入,而无需事先关闭预览表单。

所以我想添加一个回调方法到按钮WorkOn的点击事件,关闭预览表单-如果仍然打开。问题是,它可能是关闭的,在这一点上不存在,或者它仍然是打开的。

所有的例子都告诉你首先实现一个委托类型,使用这个委托创建一个事件,并注册你的回调方法。

但是当我双击一个按钮在VS(这里在我的主要形式)一个点击事件处理程序实际上是为那个按钮生成的,在掩护下一个委托也是。因此,我认为最好的方法是使用按钮现有的click事件,并将预览表单的关闭方法作为回调方法添加到它。如果此时预览表单不存在(因为用户实际上双击了它,因此已经关闭了它),我认为它的回调方法将不再被注册。会吗?
我不太明白我在哪里可以做到这一点,也不知道这通常是如何做到的。
我觉得我应该注册一个符合。net事件处理方法签名的预览表单的事件处理方法到我的WorkOn按钮的点击事件。

private void buttonPreview_Click(object sender, EventArgs e)
{
    saveVariables();
    pv = new Preview();
    transferVariableInput(pv);
    if (pv.PreviewShow())   // checks done in PreviewShow then shown
    {
        this.buttonSave.Visible = true;
        this.buttonWorkOn.Visible = true;
        // some other buttons set to visible = false here
    }
}
private void buttonWorkOn_Click(object sender, EventArgs e)
{
     // When this buttons click event occurs I want to check whether the 
     // preview form still exists and if it does it should be closed.
     this.buttonWorkOn.Visible = false;
     this.buttonSave.Visible = false;
     this.buttonOpen.Visible = true;
     this.buttonPreview.Visible = true;
     this.tabContactInfos.Enabled = true;
}

谢谢你的解释。安迪

因为一开始我被卡住了,所以我重写了我的问题。
然后我自己解决了。
请按此打开网址及解决方案

最新更新