我有一份表格要索取一些数据。在离开输入字段(TextBox,DGV)时,调用适当的_Validating方法或_CellValueChanged方法。
如果我想结束这个方法被调用的程序,那么在之前调用_FormClosing方法。
如何确定程序是否分支到_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( [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是主动的,以获得正确的结果?
我试过了
if ( this.FormClosing== true ) 所以
this.FormClosing +=new FormClosingEventHandler(MyForm_FormClosing);所以
FormClosingEventHandler cl = new FormClosingEventHandler(MyForm_FormClosing);但我总是死路一条。
发布于 2013-02-25 14:30:51
this.FormClosing是在表单开始关闭时触发的事件(如单击“关闭”按钮),因此名称。您需要应用程序来注册该事件,如下所示:
this.FormClosing +=new FormClosingEventHandler(MyForm_FormClosing);这可以确保一旦触发了FormClosing事件,就会调用您的MyForm_FormClosing。
您可以创建一个类似于bool bIsFormClosing的标志,并在调用关闭函数后设置该标志。
编辑:
正如我现在通过查看您的答案和评论所理解的,您希望在您的doLog函数中知道表单是否正在关闭。
以下是另一种方法
`
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函数被调用,您将强制关闭操作。
发布于 2013-02-25 14:48:06
这就能起作用了:
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");
}
}https://stackoverflow.com/questions/15069202
复制相似问题