首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#请求FormClosing

c#请求FormClosing
EN

Stack Overflow用户
提问于 2013-02-25 14:24:56
回答 2查看 281关注 0票数 0

我有一份表格要索取一些数据。在离开输入字段(TextBox,DGV)时,调用适当的_Validating方法或_CellValueChanged方法。

如果我想结束这个方法被调用的程序,那么在之前调用_FormClosing方法。

如何确定程序是否分支到_FormClosing方法中?

代码语言:javascript
复制
private void txb_Validating(object sender, CancelEventArgs e)
{
    doLog("Text 1");
}

private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    doLog("Text 2");
}

private void doLog(string txt)
{
    // this is first called at closing...
    if( [FormClosing is active] )
    {
        // Do something
    }
    else
    {
        // Do someting different
    }
}

private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
    // ... and this but later
    // Write the Logfile
}

我如何替换FormClosing是主动的,以获得正确的结果?

我试过了

代码语言:javascript
复制
if ( this.FormClosing== true ) 

所以

代码语言:javascript
复制
this.FormClosing +=new FormClosingEventHandler(MyForm_FormClosing);

所以

代码语言:javascript
复制
FormClosingEventHandler cl = new FormClosingEventHandler(MyForm_FormClosing);

但我总是死路一条。

EN

回答 2

Stack Overflow用户

发布于 2013-02-25 14:30:51

this.FormClosing是在表单开始关闭时触发的事件(如单击“关闭”按钮),因此名称。您需要应用程序来注册该事件,如下所示:

代码语言:javascript
复制
 this.FormClosing +=new FormClosingEventHandler(MyForm_FormClosing);

这可以确保一旦触发了FormClosing事件,就会调用您的MyForm_FormClosing

您可以创建一个类似于bool bIsFormClosing的标志,并在调用关闭函数后设置该标志。

编辑:

正如我现在通过查看您的答案和评论所理解的,您希望在您的doLog函数中知道表单是否正在关闭。

以下是另一种方法

`

代码语言:javascript
复制
public class YourForm : Form
{
    private bool bIsClosing = false;
    Private bool bClosingHandled = false;

    public YourClass()
    {
       InitializeComponent();
       this.FormClosing +=
           new FormClosingEventHandler(MyForm_FormClosing);
    }

    private void txb_Validating(object sender, CancelEventArgs e)
    {
        doLog("Text 1");
    }

    private void dgv_CellValueChanged(object sender,
        DataGridViewCellEventArgs e)
    {
        doLog("Text 2");
    }

    private void doLog(string txt)
    {
        // this is first called at closing...
        if( bIsClosing )
        {
            // Do something
            bClosingHandled = true;
            this.close(); 
        }
        else
        {
            // Do someting different
        }
    }

    private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        If(!bClosingHandled)
        {
          bIsClosing = true;
          e.Cancel = true;
          return;
        }

        // Write the Logfile
        doLog("whatever");
    }
}`

这种方法使用两个标志..。当您第一次收到关闭事件时,您将bIsClosing标志设置为true,取消事件并返回。然后,一旦您的dolog函数被调用,您将强制关闭操作。

票数 1
EN

Stack Overflow用户

发布于 2013-02-25 14:48:06

这就能起作用了:

代码语言:javascript
复制
public class YourForm : Form
{
    private bool bIsClosing = false;

    public YourClass()
    {
       InitializeComponent();
       this.FormClosing +=
           new FormClosingEventHandler(MyForm_FormClosing);
    }

    private void txb_Validating(object sender, CancelEventArgs e)
    {
        doLog("Text 1");
    }

    private void dgv_CellValueChanged(object sender,
        DataGridViewCellEventArgs e)
    {
        doLog("Text 2");
    }

    private void doLog(string txt)
    {
        // this is first called at closing...
        if( bIsClosing )
        {
            // Do something
        }
        else
        {
            // Do someting different
        }
    }

    private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        bIsClosing = true;
        // Write the Logfile
        doLog("whatever");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15069202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档