6

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

向下滚动该"Questions that may already have your answer"部分,我遇到了这个问题:如何从其中加载的 UserControl 按钮关闭 ChildWindow?我使用了以下 C# 代码:

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

这适用于一个屏幕,但我想知道我是否必须将此代码应用于我拥有的所有屏幕?我认为应该有更有效的方法。所以我的问题是:我是否需要为我拥有的每个表格应用此代码,还是有另一种(更有效的)方法?

4

4 回答 4

23

您可以使用

((Form)this.TopLevelControl).Close();
于 2012-11-23T11:21:48.147 回答
5

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

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

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

希望这可以帮助。

于 2012-11-23T11:37:43.803 回答
1

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

            MyNamespace.MyForm FormThread = (MyNamespace.MyForm)Application.OpenForms["MyForm"];
            FormThread.Close();
于 2012-11-23T19:26:59.230 回答
0

我找到了简单的答案:) 我都准备好想到类似的事情了。

要在ButtonClicked EventUserControl 内部关闭 WinForm,请使用以下代码:

private void btnCancel_Click(object sender, EventArgs e)
{
    Form someForm = (Form)this.Parent;
    someForm.Close();
}
于 2012-11-23T10:57:47.337 回答