我有一个从C#中的TextBox派生的类。我重写OnClick方法以显示文件打开对话框。之后是否有可能失去焦点?我不希望用户能够编辑文本,因为文件名可能在某一时刻无效。我尝试设置ReadOnly = true,但可以在选择文件后更改文本。
编辑:
我为此添加了相关代码。现在,焦点将从我的表格中设置为下一个控件。
class Property : TextBox
class FileSelectTextBox : Property
{
protected override void OnClick(EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
Enabled = false;
if (dialog.ShowDialog(this) == DialogResult.OK)
{
Text = dialog.FileName;
}
Enabled = true;
}
}
答案 0 :(得分:1)
这里有几个选项:
ReadOnly
。文本框仍会触发OnClick
个事件,但用户无法编辑该文本。someOtherTextBox.Focus()
) 编辑最后一条建议:您可能希望文件弹出窗口发生在 FocusGained
而不是OnClick
,这样对话框仍然会弹出用户选项卡进入控件。当然,如果需要这种行为,那就是你的决定。
编辑2:忽略上次编辑。这是一个糟糕的建议,我没有想到。 (感谢首席评论员)
答案 1 :(得分:0)
设置文本框的ReadOnly = true
属性(不要在任何时候更改它),它应该工作孤单..
其余代码就是这样..
protected override void OnClick(EventArgs e)
OpenFileDialog dialog = new OpenFileDialog();
//user can still change/edit some non-existing file/path and click OK, so set the followings
dialog.CheckFileExists = true;
dialog.CheckPathExists = true;
if (dialog.ShowDialog(this) == DialogResult.OK)
{
Text= dialog.FileName;
}
}