【问题标题】:OpenFileDialog cuts off pre-populated file name [duplicate]OpenFileDialog 切断预填充的文件名 [重复]
【发布时间】:2014-08-22 22:03:18
【问题描述】:

我使用以下内容显示打开文件对话框:

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.fsdb”,文件名字段仅显示“ionals_2014.fsdb”。

单击文件名字段并将光标向左移动时,文件名和路径的其余部分会重新出现。但我正在寻找一种让整个文件名从一开始就可见的方法。

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

任何想法如何让“打开文件”对话框从头开始显示完整的预填充文件名?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

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

      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..");
    }
    

    Dialog 的样式恢复为旧版本。

    耸耸肩。一些解决方法让我想知道很多事情..

    【讨论】:

      【解决方案2】:

      我在 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,不会出现此问题。

      【讨论】:

        【解决方案3】:

        插入代码:

        SendKeys.Send("{HOME}");
        

        行前:

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

        完成这项工作。

        【讨论】:

          【解决方案4】:

          在另一个帖子上找到了一个很好的答案: c# Sending keyboard commands to another window / process 这可以很好地修复文件名显示。

          无论如何,我都会使用计时器来确保对话框位于活动屏幕的中心。显示对话框后:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-11-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-15
            相关资源
            最近更新 更多