【发布时间】:2020-07-22 14:00:02
【问题描述】:
在想使用 using 语句时,遇到了一个我不明白的场景:
private void RoomMealHistory_Click(object sender, EventArgs e)
{
MealRoomPlanning fMealRoomPlanning = new MealRoomPlanning(true);
fMealRoomPlanning .MdiParent = this;
fMealRoomPlanning.Show();
}
此代码工作正常,我的窗口是 MdiChild。
但是,下面的代码不起作用:
private void RoomMealHistory_Click(object sender, EventArgs e)
{
using (MealRoomPlanning fMealRoomPlanning = new MealRoomPlanning(true))
{
MdiParent = this;
fMealRoomPlanning.Show();
}
}
ArgumentException: '表单不能同时是 MDI 子级和 MDI 父级。
我也尝试用 this 替换它。ParentForm 不再起作用了。
这个范围有问题吗?
【问题讨论】:
-
第二种情况下不应该是
fMealRoomPlanning.MdiParent = this;吗? -
在
MdiParent之前有一个隐含的this。像这样:this.MdiParent = this; -
您似乎对
using的用途感到困惑。它基本上创建了一个try-finally,它将确保using中的对象被放置在范围的末尾。你似乎想要的是调用“对象初始化器”,它的格式是new Thing(){ Prop = value, OtherProp = value,}; -
您还可以扩展
MealRoomPlanning的构造函数以在其中传递一个可选的MDIParent。然后你可以使用 using 块,一旦它关闭就自动摆脱控件并让你的代码简洁