我使用按钮Save
,Close
和Cancel
创建了一个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();
}
这可以完成一个屏幕的工作,但我想知道是否必须为我拥有的所有屏幕应用此代码?我认为应该有一种更有效的方式。所以我的问题是:我是否需要为我拥有的每种表单应用此代码,还是有另一种(更有效)的方式?
答案 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();