这是我制作的代码
Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
openFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
Nullable<bool> result = openFileDialog.ShowDialog();
openFileDialog.Filter = "Lua scripts (*.lua)|*.lua|Txt Scripts (*.txt*)|*.txt";
openFileDialog.Title = "Save Scripts";
if (result == true)
{
TextEditor.Text = File.ReadAllText(openFileDialog.FileName);
}
- 您在代码集
openFileDialog.Filter = "Lua scripts (*.lua)|*.lua|Txt Scripts (*.txt*)|*.txt";
之前调用.ShowDialog()
- 另外,不要在WPF中使用
System.Windows.Forms.Application.StartupPath
,而是使用AppDomain.CurrentDomain.BaseDirectory
——或者只使用Environment.CurrentDirectory
- IMO,为了使用非标准文件扩展名的用户的利益,您应该始终具有
"All files (*.*)"
过滤器选项 - 您可以将
if (result == true)
简化为仅if (result ?? false)
- 请注意,
OpenFileDialog
并不能保证OpenFileDialog.FileName
中的文件确实存在或有效,您需要自己这样做(例如if( File.Exists(...) ) { ... }
(
重新排列您的线路,如下所示:
using Microsoft.Win32;
const String FILTER_LUA = "Lua scripts (*.lua)|*.lua";
const String FILTER_TXT = "Text files (*.txt)|*.txt";
const String FILTER_ALL = "All files (*.*)|*";
// ...
OpenFileDialog ofd = new OpenFileDialog()
{
// InitialDirectory = AppDomain.CurrentDomain.BaseDirectory,
InitialDirectory = Environment.CurrentDirectory,
Filter = FILTER_LUA + "|" + FILTER_TXT + "|" + FILTER_ALL,
Title = "Open script file"
};
Boolean? result = ofd.ShowDialog();
if( ( result ?? false ) && File.Exists( ofd.FileName ) )
{
String fileText = File.ReadAllText( ofd.FileName );
this.TextEditor.Text = fileText;
}