2011-12-28 101 views
0

这与本网站较旧的帖子类似,但我不断收到错误消息。我想在C#WPF中创建一个按钮,打开一个对话框并保存一个文本文件以供日后阅读。此代码适用于Windows 32,但在Windows 64上崩溃。如何更改此代码以使其在两个系统上都能正常工作?我是编程初学者。WPF保存对话框(对于Windows 64)

Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog(); //throws error message here 

    private void savebutton_Click(object sender, RoutedEventArgs e) 
    { 
     saveFile.FileName = Class1.stringjobnum; 
     saveFile.Filter = "CCurtain (*.cur)|*.cur"; 
     saveFile.FilterIndex = 2; 
     saveFile.InitialDirectory = "T:\\Tank Baffle Curtain Calculator\\SavedTanks"; 
     saveFile.OverwritePrompt = true; 

     bool? result = saveFile.ShowDialog(); 

     if (result.HasValue && result.Value) 
     { 
      clsSaveFile.s_FilePath = saveFile.FileName; 
      int iDotLoc = clsSaveFile.s_FilePath.LastIndexOf('.'); 


      string strExtTest = clsSaveFile.s_FilePath.Substring(iDotLoc); 
      if (strExtTest != ".cur") 
       clsSaveFile.s_FilePath += ".cur"; 
      FileInfo sourceFile = new FileInfo(clsSaveFile.s_FilePath); 
      clsSaveFile.saveFile(); 
     } 
    } 
+1

是否有某些原因使用Microsoft.Win32而不是System.Windows.Forms? – djdanlib 2011-12-28 21:00:30

+0

你得到的错误信息是什么? – decyclone 2011-12-28 21:07:35

+0

让SaveFileDialog在构造函数中崩溃表明您的机器相当麻烦。发布到superuser.com,询问如何让它再次稳定。 – 2011-12-28 21:41:42

回答

0

您正在设置一个无效的FilterIndex,可能与它有关。

有过滤字符串中没有第二滤波器作为书面:

"CCurtain (*.cur)|*.cur" 

尝试FilterIndex设置为1或添加另一种过滤器的字符串。

+0

已将FilterIndex更改为1.仍崩溃。 – user1119958 2011-12-28 21:20:20

0

您应该尝试在声明中添加一个catch以便更好地了解正在发生的事情。

try 
{ 
    code here 
} 
catch (Exception ex) 
{ 
    ex.message contains the info 
} 

此外,检查空:

bool? result = saveFile.ShowDialog(); 

if (result != null && (result.HasValue && result.Value)) 
{ 
// code 
} 
+1

我做了你所说的,它有所帮助。我现在知道它在IF声明中的某处失败了。我无法进一步细分。 – user1119958 2011-12-28 21:38:54

+0

哪2条语句的2?你能发布异常消息吗? – JeremyK 2011-12-28 21:46:20

+0

请记住,如果null-able bool设置为null,那么if语句会崩溃,它会检查bool的成员?。先尝试检查null,如果null不做别的。我更新了我的答案。 – JeremyK 2011-12-28 21:47:52

0

我会创建对话框事件。而且你没有两个不同的过滤器。

private void savebutton_Click(object sender, RoutedEventArgs e) 
    { 
     Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog(); 
     saveFile.FileName = Class1.stringjobnum; 
     saveFile.Filter = "CCurtain|*.cur";; 
     saveFile.FilterIndex = 1; 
     saveFile.InitialDirectory = "T:\\Tank Baffle Curtain Calculator\\SavedTanks"; 
     saveFile.OverwritePrompt = true; 

     // Show open file dialog box 
     Nullable<bool> result = saveFile.ShowDialog(); 

     // Process open file dialog box results 
     if (result == true) 
     { 
      string filename = saveFile.FileName; 
      // are you sure you need to check the extension. 
      // if so extension is a a fileinfo property 
     } 
+0

将你给我的东西复制并粘贴到我的代码中。 dlg.ShowDialog();抛出一个错误。我将它改为saveFile.ShowDialog();.这可能是我的错误。尽管如此,我运行了与上面相同的代码(dlg更改除外),并且它在windows32中运行良好。但是,当我尝试在Windows64上运行时,它仍然崩溃。 – user1119958 2011-12-28 21:50:07

+1

我只是在Windows 2008 R2服务器(64位)上测试它,它工作。检查你的编译器设置。我的CPU是任何CPU。如果编译器设置为64位,那么该控件可能不起作用。 – Paparazzi 2011-12-28 22:11:19

+0

你能给我一个关于如何改变我的编译器设置的链接吗? – user1119958 2011-12-28 22:19:42