OpenFileDialog切断预先填充的文件名

本文关键字:填充 文件名 OpenFileDialog | 更新日期: 2023-09-27 18:11:16

我使用以下命令显示一个打开文件对话框:

OpenFileDialog fdlg = new OpenFileDialog();
fdlg.FileName = Properties.Settings.Default.Last_competition_file;
fdlg.Filter = "FS database files (*.fsdb)|*.fsdb|All files (*.*)|*.*";
fdlg.FilterIndex = 0;
if (fdlg.ShowDialog(this) == DialogResult.Cancel) return false;

(Properties.Settings.Default。Last_competition_file包含到最后一个文件的整个路径)

问题:对于文件名"c:'data'nationals_2014. c"

文件名称字段只显示"ionals_2014.fsdb"。

当点击文件名字段,并将光标向左移动时,文件名的剩余部分&路径又出现。但是我正在寻找一种方法,使整个文件名从一开始就可见。

注意,这不是长度问题。我还尝试分别设置路径和文件名(通过OpenFileDialog.InitialDirectory),但即使这样,也只显示了文件名的尾部(现在短得多)。

任何想法如何获得打开文件对话框显示完整的预填充文件名从一开始?

OpenFileDialog切断预先填充的文件名

警告:这是一个汇编,不是一个真正的答案。

  OpenFileDialog fdlg = new OpenFileDialog();
  fdlg.FileName = Properties.Settings.Default.Last_competition_file;
  fdlg.Filter = "FS database files (*.fsdb)|*.fsdb|All files (*.*)|*.*";
  fdlg.FilterIndex = 0;
  fdlg.ShowHelp = true;
  fdlg.HelpRequest +=  new System.EventHandler(HelpRequested); ;
  if (fdlg.ShowDialog(this) == DialogResult.Cancel) return false;
private void HelpRequested(object sender, EventArgs e)
{
    MessageBox.Show(".. is no Help", "There..");
}

对话框的样式恢复到原来的样式。

耸耸肩。一些变通方法让我对很多事情产生了疑问。

我在windows 10上得到了同样的东西,打开文件对话框设置如下:

var dialog = new OpenFileDialog{
  Filter = "excel files (*.xlsx)|*.xlsx",
  InitialDirectory = @"c:'temp",
  FileName = @"MyFileNameExceeds14Characters.xlsx"
};
dialog.ShowDialog();

变通:

  1. 设置AutoUpgradeEnabled = false恢复到旧的对话框样式。但是这样你就只能使用旧的UI了。
  2. 确保文件名长度不超过14个字符。如果您不能直接控制文件名,那么通过Path.GetFileNameWithoutExtension()运行它以尽可能地精简它。
  3. 使用SaveFileDialog代替,它没有这个问题。
插入代码:
SendKeys.Send("{HOME}");

行前:

if (fdlg.ShowDialog(this) == DialogResult.Cancel) return false;

在另一个帖子上找到了一个很好的答案:发送键盘命令到另一个窗口/进程这可以很好地修复文件名显示。

为了确保对话框位于活动屏幕的中心,我使用了计时器。对话框显示后:

IntPtr handle = FindWindowByCaption(IntPtr.Zero, dialogTitle));
SetForegroundWindow(handle);
SendKeys.SendWait("{HOME}");
SendKeys.Flush();