0

我正在开发 Windows 窗体应用程序并创建了一个 TextBox 控件和一个浏览按钮控件,以便用户可以通过 Button 选择一个文件夹并在 TextBox 中显示目录。

我想让用户可以自由地将目录路径直接粘贴到 TextBox 中。但是,同时,用户必须在 TextBox 中仅提供有效目录作为字符串/文本。

此外,我想禁用通过键盘或任何其他可能的方式编辑此目录。用户将能够随时粘贴新的有效目录,但不能在 TextBox 中对其进行编辑。

有没有办法在运行时使用 C# 来做到这一点?

谢谢。

4

4 回答 4

2

如果将文本框设置为ReadOnlythen 将停止编辑TextBox.

然后添加一个事件,KeyDown您可以捕获是否Ctrl + V按下,然后使用类基于该事件进行操作Clipbboard,如果目录有效,则设置TextBox.Text.

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
  if (e.Modifiers == Keys.Control && e.KeyCode == Keys.V)
  {
    var clipboard = Clipboard.GetText();
    if (Directory.Exists(clipboard))
      textBox1.Text = clipboard;
  }
}
于 2012-10-12T09:26:27.067 回答
1

我想让用户可以自由地将目录路径 直接粘贴到 TextBox 中。但是,同时,用户必须在 TextBox 中仅提供有效目录作为字符串/文本。

此外,我想禁用通过键盘或任何其他可能的方式编辑此目录。用户将能够随时粘贴新的有效目录,但不能在 TextBox 中对其进行编辑。

是不是很矛盾?那你为什么不使用两个文本框呢?首先让用户输入/粘贴,使用 onchange 事件捕获调用检查目录路径是否正确的方法。如果是,该方法将其复制到第二个文本框,不可编辑,该文本框也链接到您的目录浏览器。

于 2012-10-12T09:26:44.727 回答
0

您可以处理该TextChanged事件并检查该文件夹是否有效并且可以在那里访问;如果不是,请撤消他们的更改。如果他们可以编辑文本框文本,这可能不切实际,因为它会在每次击键后检查文件夹是否存在,因此无法输入任何新内容。然而,这可能是您希望它的行为方式!

要检查路径是否有效,我会使用Path.GetFullPath- 将您的文本框文本传递给它,如果路径不存在/无效/您无权访问它,它将引发异常。

如果这对您来说有点乱,您可以使用一个按钮来设置剪贴板中的文本Clipboard.GetText(),然后执行您的检查,而不是让他们能够编辑文本框。

于 2012-10-12T09:31:34.380 回答
0

感谢大家的建议和回答。这是我所做的事情,对我来说就像是一种魅力。我希望,如果以后遇到同样的问题,这将对某人有所帮助。

它是 LukeHennerley 在此处发布的原始代码的修改版本。感谢 LukeHennerley。

private void txtBoxTargetDir_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Modifiers == Keys.Control && e.KeyCode == Keys.V)
        {
            var clipboard = Clipboard.GetText();
            if (Directory.Exists(clipboard))
            {
                txtBoxTargetDir.Clear();
                txtBoxTargetDir.Text = clipboard;
                txtBoxTargetDir.ReadOnly = true;
            }
            else
            {
                txtBoxTargetDir.Clear();
                txtBoxTargetDir.Text = "It's not a valid directory. Please provide a valid directory.";
            }
        }
    }

您必须首先在 Form.Designer.cs 中添加此事件。

于 2012-10-12T11:10:01.513 回答