2011-07-12 41 views
1

这是有点儿奇怪,让我尝试尽可能地解释一下:C#Windows窗体:打开文件对话框奇怪的问题

当我创建一个新的文件并保存它,它正确保存(的test.xml)。 当我修改该文件,并保存它,它正确保存(到的test.xml) 当我再次修改此文件或只选择另存为,它工作正常(newtest.xml)

然而,当我打开一个文件时,对一个文件(test.xml)进行更改,然后单击Save it is saved to(newtest.xml)。

这是我MainForm.cs

  if (this.openEditorDialog1.ShowDialog(this) == DialogResult.OK && editForm != null) 
     { 


      editForm.Close();     
      editForm = new EditorForm(this); 
      editForm.OpenFile(this.openEditorDialog1.FileName); 
      editForm.Closing += new CancelEventHandler(EditorForm_Closing); 
      editForm.MdiParent = this; 
      editForm.Show(); 
     } 

private void biFileSave_Click(object sender, EventArgs e) 
{ 
if (!editForm.HasFileName) 
      { 
       if (this.saveEditorDialog1.ShowDialog(this) == DialogResult.OK) 
       { 
        this.ActiveDiagram.SaveSoap(this.saveEditorDialog1.FileName); 
        editForm.FileName = this.saveEditorDialog1.FileName; 
       } 
      } 
      else 
      { 
       this.ActiveDiagram.SaveSoap(this.saveEditorDialog1.FileName); 
      } 

这是我EditorForm.cs

public void OpenFile(string strFileName) 
    { 

     diagramComponent.LoadSoap(mainForm.openEditorDialog1.FileName); 
     this.FileName = mainForm.openEditorDialog1.FileName; 
     this.tabControl1.SelectedTab = DiagramTab; 

    } 

我敢肯定,它与我在做什么在EditoForm做但我似乎无法弄清楚。

回答

2
else 
{ 
    this.ActiveDiagram.SaveSoap(this.saveEditorDialog1.FileName); 

它看起来像你想:

this.ActiveDiagram.SaveSoap(editForm.FileName); 
+0

NullReferenceException当我尝试... – jonalodev

+0

哇,不要我知道它的工作。非常感谢 :) – jonalodev

1

它必须与mainForm.openEditorDialog1.FileName有关。使用保存形式的FileName属性。当您打开文件时,请将fileName设置为mainForm.openEditorDialog1.FileName。当您另存为时,在那里也设置FileName财产。这样,只要当前文件发生更改,就可以适当地设置FileName属性。然后,当需要保存文件时,您始终拥有正确的文件名。

总之,只有在使用SaveAs对话框或FileOpen对话框后,才能使用.FileName属性。

+0

嗯......我想你是对的。虽然,我试图做到这一点(添加我上面的保存方法)。如何从我的MainForm中调用正确的FileName? – jonalodev

+0

您可以在EditorForm上为文件名添加属性。然后,当您完成EditorForm(或者当您需要名称)时,获取editorForm.FileName。 –