将第二种形式的回调方法添加到主窗体上的现有按钮事件处理程序

时间:2015-07-20 10:53:05

标签: c# events callback delegates eventhandler

其实我有一个简单的问题。搜索时我只发现一些不同的问题。

我有一个包含用户输入控件的主窗体。主窗体还有一些控制按钮。其中一个是“ShowPreview”,一个是“WorkOn”。

点击“ShowPreview”后会运行一些检查,如果确定,则会将用户的输入传输到另一个名为preview的表单,其中输入会更好地呈现。
通过双击预览表单,它将关闭。 但是,用户可以通过单击主表单按钮“WorkOn”返回处理他或她的输入,而无需事先关闭预览表单。

所以我想在关闭预览表单的按钮WorkOn的click事件中添加一个回调方法 - 如果仍然打开的话。问题是,它可以在此时关闭且不存在,或者它仍然可以打开。

所有示例都告诉您首先实现委托类型,使用此委托创建事件并注册您的回调方法。

但是,当我双击VS中的一个按钮(在我的主窗体上)时,实际上会为该按钮生成一个click事件处理程序,并且在一个代理人的掩护下也是如此。所以我认为最好的方法是使用按钮的现有点击事件,并将预览表单的结束方法作为回调方法添加到它。如果此时预览表单不存在(因为用户实际上双击它并因此已经关闭它),我想它的回调方法将不再被注册。会吗? 我不太清楚我能做到这一点以及如何做到这一点 我觉得我应该只注册一个符合.NETs事件处理方法签名的预览表格的事件处理方法到我的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;
}

感谢您的澄清。 岸堤

1 个答案:

答案 0 :(得分:0)

起初我被困住了,我重写了我的问题 然后我自己解决了。
Please click here to open the URL with the solution