我正在开发 Windows 窗体应用程序并创建了一个 TextBox 控件和一个浏览按钮控件,以便用户可以通过 Button 选择一个文件夹并在 TextBox 中显示目录。
我想让用户可以自由地将目录路径直接粘贴到 TextBox 中。但是,同时,用户必须在 TextBox 中仅提供有效目录作为字符串/文本。
此外,我想禁用通过键盘或任何其他可能的方式编辑此目录。用户将能够随时粘贴新的有效目录,但不能在 TextBox 中对其进行编辑。
有没有办法在运行时使用 C# 来做到这一点?
谢谢。
如果将文本框设置为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;
}
}
我想让用户可以自由地将目录路径 直接粘贴到 TextBox 中。但是,同时,用户必须在 TextBox 中仅提供有效目录作为字符串/文本。
此外,我想禁用通过键盘或任何其他可能的方式编辑此目录。用户将能够随时粘贴新的有效目录,但不能在 TextBox 中对其进行编辑。
是不是很矛盾?那你为什么不使用两个文本框呢?首先让用户输入/粘贴,使用 onchange 事件捕获调用检查目录路径是否正确的方法。如果是,该方法将其复制到第二个文本框,不可编辑,该文本框也链接到您的目录浏览器。
您可以处理该TextChanged事件并检查该文件夹是否有效并且可以在那里访问;如果不是,请撤消他们的更改。如果他们可以编辑文本框文本,这可能不切实际,因为它会在每次击键后检查文件夹是否存在,因此无法输入任何新内容。然而,这可能是您希望它的行为方式!
要检查路径是否有效,我会使用Path.GetFullPath- 将您的文本框文本传递给它,如果路径不存在/无效/您无权访问它,它将引发异常。
如果这对您来说有点乱,您可以使用一个按钮来设置剪贴板中的文本Clipboard.GetText(),然后执行您的检查,而不是让他们能够编辑文本框。
感谢大家的建议和回答。这是我所做的事情,对我来说就像是一种魅力。我希望,如果以后遇到同样的问题,这将对某人有所帮助。
它是 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 中添加此事件。