我有一张表格。在那里,我必须使用Text和Cancel按钮显示一个对话框(在某些情况下)。我想在我的表单中捕获该按钮的事件或者知道是否单击了取消按钮。
如何做到这一点?我相信这应该是可能的,但不知道怎么做?
从我的mainForm我有BackgroundWorker。当backgroundWorker启动时,我打开一个childForm(带有Label和一个按钮),当后台任务结束时,我关闭了childForm。我想要的更多是:当点击childForm的按钮时,应该取消后台工作的正在进行的任务。 的解
在我的childForm中,我已将CancelButton属性设置为表单的cancelBtn。其他代码是:
private bool cancel;
public bool Cancel
{
get { return cancel; }
set { cancel = value; }
}
// Set the flag as true to indicate that Cancel button was actually pressed
private void cancelBtn_Click(object sender, EventArgs e)
{
Cancel = true;
}
在mainForm中:
childDlg = new ChildDialog();
// wHILE cALLING
backgroundWorker1.RunWorkerAsync();
msg = "Connecting...";
childDlg .set(msg, "");
if (!childDlg .IsAccessible)
{
// This is caught even when the dialog is closed
if (childDlg .ShowDialog() == DialogResult.Cancel) {
if (childDlg.Cancel == true) { // Was really cancelBtn pressed
// NOW ONLY do my stuff
}
}
}
我曾尝试在父类中使用@DeveloperX技术,即EventHandler,但是父类方法没有被调用。尝试了很多,但无法成功。然后尝试了@ RobinJ的技术并且它起作用了。我只需添加标志来识别是真的取消按钮或jjst windw正常关闭。
感谢大家帮我解决问题。我非常感谢你的帮助。
由于
答案 0 :(得分:2)
将DialogResult
属性设置为DialogResult.Ok
或DialogResult.Cancel
然后在父母表格中:
Form form = new Form();
DialogResult results = form.DialogResult;
if(results == DialogResult.Ok)
{
... make magic
}
else
{
...
}
答案 1 :(得分:1)
将它放在应该捕获事件的表单中:
frmDialog.ShowDialog();
这是在对话框的btnCancel_Click事件中:
return DialogResult.Cancel();
很抱歉,如果我在这里混淆VB和C#,但它几乎是一样的。
答案 2 :(得分:1)
只需为显示对话框的表单创建一个事件即可 并以父表单处理此事件 如果用户点击带有specefic参数的ok fire事件并取消另一个参数(例如dialogresult.cancel)
伪实现可以像这样
public class FormChild : System.Windows.Forms.Form
{
public event EventHandler DialogCanceled;
public event EventHandler DialogConfirmed;
public void ShowDialog()
{
using (var dialogForm = new FormDialog())
{
if (dialogForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if (DialogConfirmed != null)
DialogConfirmed(this,new EventArgs());
}
else
{
if (DialogCanceled != null)
DialogCanceled(this,new EventArgs());
}
}
}
}
public class ParentForm : System.Windows.Forms.Form
{
public void callChild()
{
using (var f = new FormChild())
{
f.DialogCanceled += new EventHandler(f_DialogCanceled);
f.DialogConfirmed += new EventHandler(f_DialogConfirmed);
f.ShowDialog();
}
}
void f_DialogConfirmed(object sender, EventArgs e)
{
throw new NotImplementedException();
}
void f_DialogCanceled(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}
答案 3 :(得分:0)
您应该在需要显示为对话框的表单上使用ShowDialog
方法,然后使用DialogResult
属性与父窗体进行对话操作的结果通信。
这样您就可以处理拥有该按钮的表单上的按钮,但将DialogResult
设置为DialogResult.Cancel
以指定用户按下取消按钮。
答案 4 :(得分:0)
使用以下内容:
Form form = new Form();
switch (form.ShowDialog())
{
case DialogResult.Ok:
{
....
Break;
}
case DialogResult.Cancel:
{
....
Break;
}
}
将Form.AcceptButton
和Form.CancelButton
属性设置为相应的按钮。
请参阅以下内容:
答案 5 :(得分:0)
对话框通常是一个阻塞事件,其中父表单的事件处理完全没有意义。
如果它不是模态对话框,您始终可以在弹出窗体中创建一个或多个公共事件,这些事件在单击按钮时触发。然后可以通过父表单捕获这些事件。
不要将您的按钮暴露给父表单,这将是糟糕的oo编程。