C#ShowDialog Parent Form为null

Ero*_*ocM 8 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();
  }

}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用与之前相同的屏幕再次提示他们.

LoadWorkstationFile中,它具有以下代码:

  if (this.Parent == null)
  {
    var sc = new ScanCheck();
    sc.Show();
    this.Hide();
  }
Run Code Online (Sandbox Code Playgroud)

初始加载一切都很好.当我想再次加载数据时它已加载,我最终得到2个LoadWorkstationFile屏幕,因为Parent总是等于null.

我有错误的想法吗?当使用.ShowDialog调用父元素时,它应该是DisplayDataForm吗?

谢谢你.

Nig*_*ler 19

你应该检查Owner而不是Parent

您在ShowDialog的构造函数中设置的是Owner属性.这告诉其他形式"拥有"它的形式.父母(如Mario所示)描述了Control的所有权关系.

所以你应该将你的代码更改为:

if (this.Owner == null)
  {
    var sc = new ScanCheck();
    sc.Show();
    this.Hide();
  }
Run Code Online (Sandbox Code Playgroud)

它应该工作.