0

这与该站点上的旧帖子类似,但我不断收到错误消息。我想在 C# WPF 中创建一个按钮,该按钮打开一个对话框并保存一个文本文件以供以后读取。此代码适用于 windows 32,但在 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();
        }
    }
4

3 回答 3

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
        }
于 2011-12-28T21:37:38.967 回答
0

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

过滤器字符串中没有第二个过滤器,如下所示:

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

尝试将 FilterIndex 设置为 1 或向字符串添加另一个过滤器。

于 2011-12-28T21:06:51.680 回答
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
}
于 2011-12-28T21:08:08.527 回答