我想改变的文件名SaveFileDialog
在连接到事件处理程序FileOk
事件,以取代由用户用另外的文件名在某些情况下,输入文件名,同时保持对话框打开 :
var dialog = new SaveFileDialog();
...
dialog.FileOk +=
delegate (object sender, CancelEventArgs e)
{
if (dialog.FileName.EndsWith (".foo"))
{
dialog.FileName = "xyz.bar";
e.Cancel = true;
}
};
逐句通过代码显示, FileName
被确适当的更新,但是当事件处理函数返回,在对话框中显示的文件名不会更改。 我已经看到了,我可以在理论上使用的Win32如下代码对话框本身来更改文件名:
class Win32
{
[DllImport("User32")]
public static extern IntPtr GetParent(IntPtr);
[DllImport("User32")]
public static extern int SetDlgItemText(IntPtr, int string, int);
public const int FileTitleCntrlID = 0x47c;
}
void SetFileName(IntPtr hdlg, string name)
{
Win32.SetDlgItemText (Win32.GetParent (hdlg), Win32.FileTitleCntrlID, name);
}
但是,我不知道我在哪里可以得到HDLG
关联到SaveFileDialog
从实例。 我知道我可以重写整个SaveFileDialog
包装器自己(或使用像NuffSaveFileDialog代码或SaveFileDialog的CodeProject上的延伸 ),但我更喜欢使用标准的WinForms类技术原因。