C#ShowDialog Parent Form为null

时间:2011-04-20 13:49:13

标签: c# forms

我有两种形式。

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

像往常一样感谢。

3 个答案:

答案 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表单的父级。