在C#winforms应用程序中,在另一个表单打开的表单上保留数据的常规方法是什么?我打算将它全部保存在表单对象上,但是当表单关闭时,似乎处理了该表单对象。意思是我丢失了所有数据。
我可以将表单包装在另一个对象中,该对象可以获取所有数据,但这似乎很多工作。
有没有办法在窗体关闭时隐藏它而不是处理它?</ p>
答案 0 :(得分:2)
2种可能性:
1)抓住关闭事件并隐藏它。创建函数(到隐藏表单)以使用属性获取输入值。
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
this.Visible = false;
e.Cancel = true;
}
2)Moj告诉你:如果你在创建它之后关闭了表单,那么表单对象仍然存在且可以被访问
我赞成2)+属性
答案 1 :(得分:2)
使用公共属性。
答案 2 :(得分:2)
关闭表单时不会处理。 通常,这就是数据的管理方式。
Result res;
using (MyForm form = new MyForm())
{
if(form.ShowDialog()== DialogResult.OK)
{
// In Myform, after the data collection is done, you can set DialogResult=DialogResult.Ok and close form using form.Close();
res = form.Result; // expose forms data as result.
}
}
UserResult(res);
答案 3 :(得分:1)
我建议你构建一个包含数据的单独对象。您可以以非常简单的方式将表单控件绑定到其属性(支持设计器,无需代码)。这样可以将数据与表单分开。
如果您还不知道此文档: How to: Create a Simple-Bound Control on a Windows Form
的Matthias
答案 4 :(得分:1)
你可以隐藏表格而不是处理它,但这几乎肯定不是你想要的。如果您只是隐藏表单,表单会占用流程中不会释放的资源。只有你处理它们才会消失。在不使用时保留一堆Form实例只是在以后要求问题。
您可能想要做的是在表单完成显示之后但在实际关闭之前从表单中传回一些结果数据。例如,
MyDataObject data;
using (var form = new SomeForm() ) {
var dialogResult = form.ShowDialog(someWindow);
data = form.InterestingData;
}
答案 5 :(得分:0)
访问子表单的控件在技术上是可行的,但不是一个好的设计。 我是这样做的:
1)在“接受/保存”按钮上,将this.DialogResult
设置为“确定”,并获取所有控件信息。在关闭按钮或/和关闭事件中将this.DialogResult
设置为“取消”
2)如果数据被映射到一个对象(比如说“客户”)...设置对象属性。如果没有,只需用属性公开每个控件的数据,处理所有需要的格式化。
3)使用this.Close();
关闭表单,不要将其丢弃。
4)在父窗体上检查dialog.ShowDialog()== DialogResult.OK,然后访问您在步骤2中创建的公共属性...或者如果加载带有信息的对象,则只需访问该对象表格(由物业也)
5)然后调用dialog.Dispose()
方法...用户按下OK或取消。
希望这可以帮助你...