2014-04-19 219 views
1

在我的主窗体中,我使用ShowDialog()打开一个新窗体(让它称为父窗体)。在父窗体中,我有一个加载OpenFileDialog的按钮,当我加载图像并单击打开按钮时,OpenFileDialog关闭,但它也关闭了父窗口,我不希望发生这种情况。对话窗口中的对话框 - 父对话框关闭子对话框

主要形式代码:

// ADD GRAPHICS BUTTON 
    private void bAddGraphics_Click(object sender, EventArgs e) 
    { 
     NewGraphics newGraphics = new NewGraphics(); 
     newGraphics.ShowDialog(); 

     if (newGraphics.DialogResult == DialogResult.OK) 
     { 
      Core.Graphics tempGraphicsObject = new Core.Graphics(); 
      tempGraphicsObject.name = newGraphics.name; 
      tempGraphicsObject.background = newGraphics.bgImage; 
      core.NewGraphics(tempGraphicsObject); 
      generateSingleGraphicsControl(core.project.graphics[core.project.graphics.Count-1].id, core.project.graphics[core.project.graphics.Count-1].name); 
     } 
     newGraphics.Dispose(); 
    } 

父窗体(对话)

 OpenFileDialog openFileDialog = new OpenFileDialog(); 
     DialogResult result = openFileDialog.ShowDialog(); 

     if (result == DialogResult.OK) 
     { 
      tbBackground.Text = openFileDialog.FileName; 
      bgImage = Image.FromFile(tbBackground.Text); 
     } 
     openFileDialog.Dispose(); 

是不是因为我用的DialogResult两次或者也许是因为我在一个对话框窗口调用的ShowDialog()?如果我不会在父类上使用ShowDialog(),但只是Show()它可以正常工作,但不能使用DialogResult属性。有没有办法解决它,或者你只是不能使用ShowDialog()两次?

+0

你检查' newGraphics.DialogResult'为“主”形式。你在哪里设置“父母”形式的价值?我没有在您发布的代码中看到它。 –

+0

对不起,父窗体的dialogresult属性由Cancel和OK按钮设置。 – Safiron

+0

但是父窗体关闭,即使你没有按下任何一个按钮? –

回答

1

如果“父”表单也关闭,那么您要么调用Close()要么在表单上设置DialogResult属性(这也将关闭它)。

MSDN,关于DialogResult属性:

如果窗体显示为一个对话框,设置该属性从DialogResult的枚举值设置对话框结果的价值形式,隐藏模式对话框,并将控制权返回给调用表单。

我不明白你在做那些你发布的代码中的任何一个,但在你的“父”表检查这行的其中之一:

DialogResult = DialogResult.OK; 

this.DialogResult = DialogResult.Cancel; 

Close(); 

this.Close();