我有两种形式。
LoadWorkstationFile 会提示用户输入要加载的ID。
DisplayDataForm 显示他们在上一个屏幕上选择的ID数据。
在 DisplayDataForm 中,他们可以点击一个选项来加载新数据,它将LoadDataForm称为ShowDiaglog:
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
var answer = MessageBox.Show("Do you wish to save the current work file before continuing?", "Confirmation",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (answer == DialogResult.Cancel)
return;
if (answer == DialogResult.Yes)
SaveWorkFile();
var prevworkstationid = Configuration.WorkstationId;
var lw = new LoadWorkstationFile();
lw.ShowDialog(this);
if (Configuration.WorkstationId != prevworkstationid)
{
LoadData();
}
}
正如您所看到的,我使用与之前相同的屏幕再次提示他们。
在 LoadWorkstationFile 中,它包含以下代码:
if (this.Parent == null)
{
var sc = new ScanCheck();
sc.Show();
this.Hide();
}
初始加载一切都很好。当我想再次加载数据时它已加载,我最终得到了2个 LoadWorkstationFile 屏幕,因为Parent总是等于null。
我有错误的想法吗?使用.ShowDialog调用父项是否为 DisplayDataForm ?
像往常一样感谢。
答案 0 :(得分:18)
您应该检查Owner
而不是Parent
您在ShowDialog的构造函数中设置的是Owner属性。 这告诉其他形式“拥有”它的形式。 父母(如Mario所示)描述了控制权的所有权关系。
因此您应该将代码更改为:
if (this.Owner == null)
{
var sc = new ScanCheck();
sc.Show();
this.Hide();
}
它应该有用。
答案 1 :(得分:2)
Parent是从控件继承的属性,用于描述嵌入关系(标签具有表单的父级)。
我不认为在使用ShowDialog()时设置它。
我认为所有者是要检查的正确属性。
HTH
马里奥
答案 2 :(得分:0)
由于您在DisplayDataForm
中将lw.ShowDialog(this)
作为父级传递; DisplayDataForm是第二次调用时LoadWorkstationFile表单的父级。