以编程方式更改C#中TextBox的焦点

时间:2012-01-10 13:01:15

标签: c# winforms textbox

我有一个从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;
    }
}

2 个答案:

答案 0 :(得分:1)

这里有几个选项:

  1. 制作文本框ReadOnly。文本框仍会触发OnClick个事件,但用户无法编辑该文本。
  2. 在点击事件结束时禁用文本框 - 缺点是点击事件不会再次触发(这意味着用户将无法改变主意并选择新文件)。
  3. 只需在click事件结束时将焦点设置在其他位置即可。 (someOtherTextBox.Focus()
  4. 编辑最后一条建议:您可能希望文件弹出窗口发生在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;
        }
    }