C# 如何在UserControl中关闭窗体

C# 如何在UserControl中关闭窗体,c#,winforms,user-controls,visual-c#-express-2010,C#,Winforms,User Controls,Visual C# Express 2010,我用按钮保存,关闭和取消创建了一个用户控件。我想在“取消”按钮上关闭表单而不保存,在“关闭”按钮上提示保存消息,在“保存”按钮上保存而不关闭。通常,我会在Cancel按钮上使用this.Close(),但是UserControl没有这样的选项。所以我想我必须为它设置一个属性 向下滚动“可能已经有你答案的问题”部分,我遇到了这个问题:我使用了以下C代码: 这在一个屏幕上就可以了,但是我想知道我是否必须在所有的屏幕上都应用这个代码?我认为应该有一个更有效的方法。因此,我的问题是:我是否需要将此代码应

我用按钮
保存
关闭
取消
创建了一个用户控件。我想在“取消”按钮上关闭表单而不保存,在“关闭”按钮上提示保存消息,在“保存”按钮上保存而不关闭。通常,我会在Cancel按钮上使用
this.Close()
,但是UserControl没有这样的选项。所以我想我必须为它设置一个属性

向下滚动
“可能已经有你答案的问题”
部分,我遇到了这个问题:我使用了以下C代码:


这在一个屏幕上就可以了,但是我想知道我是否必须在所有的屏幕上都应用这个代码?我认为应该有一个更有效的方法。因此,我的问题是:我是否需要将此代码应用于我拥有的每个表单,或者是否有其他(更有效的)方法?

我找到了一个简单的答案:)我已经想到了类似的方法

要在UserControl内的
按钮单击事件中关闭WinForm,请使用以下代码:

private void btnCancel_Click(object sender, EventArgs e)
{
    Form someForm = (Form)this.Parent;
    someForm.Close();
}
你可以用

((Form)this.TopLevelControl).Close();

您可以使用可用于任何控件的FindForm方法:

private void btnCancel_Click(object sender, EventArgs e)
{
    Form tmp = this.FindForm();
    tmp.Close();
    tmp.Dispose();
}
不要忘记处理表单以释放资源


希望这有帮助。

您还可以使用远程线程关闭代码任何部分中的一个窗体:

            MyNamespace.MyForm FormThread = (MyNamespace.MyForm)Application.OpenForms["MyForm"];
            FormThread.Close();

这取决于usercontrol是否直接嵌入表单或其他子控件中。使用TopLevelControl应该使TrickControl不应该与它们的父控件发生冲突,而是引发一个事件。我的答案就是我使用它的目的(实际上,控件直接嵌入到表单中)。但我更喜欢你你帮了我的忙。非常感谢
            MyNamespace.MyForm FormThread = (MyNamespace.MyForm)Application.OpenForms["MyForm"];
            FormThread.Close();