C# WPF保存对话框(适用于windows 64)
这类似于这个网站上的旧帖子,但我一直收到一条错误消息。我想在C WPF中创建一个按钮,打开一个对话框并保存一个文本文件以供以后阅读。此代码适用于windows 32,但在windows 64上崩溃。如何更改此代码以使其在两个系统上都工作?我是编程的初学者C# WPF保存对话框(适用于windows 64),c#,wpf,savefiledialog,windows64,C#,Wpf,Savefiledialog,Windows64,这类似于这个网站上的旧帖子,但我一直收到一条错误消息。我想在C WPF中创建一个按钮,打开一个对话框并保存一个文本文件以供以后阅读。此代码适用于windows 32,但在windows 64上崩溃。如何更改此代码以使其在两个系统上都工作?我是编程的初学者 Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog(); //throws error message here private v
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();
}
}
您正在设置无效的FilterIndex,这可能与此有关 过滤器字符串中没有写入的第二个过滤器:
"CCurtain (*.cur)|*.cur"
尝试将FilterIndex设置为1或向字符串添加另一个筛选器。您应该尝试在语句周围添加一个catch,以便更好地了解发生了什么
try
{
code here
}
catch (Exception ex)
{
ex.message contains the info
}
此外,请检查空值:
bool? result = saveFile.ShowDialog();
if (result != null && (result.HasValue && result.Value))
{
// code
}
我将在事件中创建对话框。你没有两个不同的过滤器
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
}
您使用Microsoft.Win32 one而不是System.Windows.Forms one有什么原因吗?您收到的错误消息是什么?让SaveFileDialog在构造函数中崩溃表明您的计算机严重损坏。发帖至superuser.com,询问如何使其重新稳定。我曾尝试使用System.Windows.Forms one,但它不断向我提供有关缺少引用的信息。我无法理解这一点,所以我使用了这个代码,因为它与我的机器一起工作。但其他人则不然。我有预感win32是根本问题。如果你能告诉我要添加哪些参考资料,我可以试试看。我现在知道了。你是对的djdanlib,你必须使用windows窗体;下面是有效的代码:我添加了SaveFileDialog saveFile=newsavefiledialog;在私有空间内,取出以Microsoft.Win32开头的行…..将FilterIndex更改为1。仍然崩溃。我照你说的做了,这有点帮助。我现在知道它在IF语句中的某个地方失败了。我无法进一步分解它。若2的语句是什么呢?您可以发布异常消息吗?请记住,如果null able bool设置为null,那么如果检查bool的成员,您的if语句将崩溃?。首先尝试检查null,如果null,则不执行任何其他操作。我更新了我的答案。第一个if语句就是我所指的那个。我的结果值似乎不为null。请复制并将您提供的内容粘贴到我的代码中。dlg.ShowDialog;抛出一个错误。我将其更改为saveFile.ShowDialog;。那可能是我的错误。尽管如此,我还是运行了与上面相同的代码,除了dlg的更改,而且在windows32中也运行得很好。但是,当我尝试在windows64上运行时,它仍然会崩溃。我刚刚在Windows2008R2服务器64位上测试了它,它可以正常工作。检查编译器设置。我的是任何CPU。如果编译器设置为64位,则该控件可能无法工作。能否给我一个有关如何更改编译器设置的链接?只需右键单击“属性”并选择“生成”选项卡。但我改成了64位,它仍然对我有效,所以我不知道。