如何在UserControl中关闭表单

时间:2012-11-23 10:47:10

标签: c# winforms user-controls visual-c#-express-2010

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

向下滚动"Questions that may already have your answer"部分,我遇到了这个问题:How to close a ChildWindow from an UserControl button loaded inside it?我使用了以下C#代码:

private void btnCancel_Click(object sender, EventArgs e)
{
    ProjectInfo infoScreen = (ProjectInfo)this.Parent;
    infoScreen.Close();
}

这可以完成一个屏幕的工作,但我想知道是否必须为我拥有的所有屏幕应用此代码?我认为应该有一种更有效的方式。所以我的问题是:我是否需要为我拥有的每种表单应用此代码,还是有另一种(更有效)的方式?

4 个答案:

答案 0 :(得分:17)

你可以使用

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

答案 1 :(得分:3)

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

private void btnCancel_Click(object sender, EventArgs e)
{
    Form tmp = this.FindForm();
    tmp.Close();
    tmp.Dispose();
}

不要忘记处理表单以释放资源。

希望这有帮助。

答案 2 :(得分:0)

我找到了简单的答案:)我已经准备好想到这样的事了。

要关闭UserControl中ButtonClicked Event内的WinForm,请使用以下代码:

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

答案 3 :(得分:0)

您还可以使用远程线程在代码的任何部分关闭一个表单:

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