单击文本框时保持选择

时间:2018-08-23 17:04:25

标签: c# winforms

当用户单击框时,我需要在TextBox中选择文本。如果已经选择了文本,则它必须是常规光标。因此,在所有文本框的click事件上,我都有以下代码:

TextBox t = (TextBox)sender;
bool alreadyselected = t.SelectedText == t.Text;
if (!alreadyselected) t.SelectAll();

问题是,在到达点击事件时,t.SelectedText为空 因此即使单击多次,全文也始终会被选中

如果可以的话,我希望能同时针对所有文本框提供解决方案

2 个答案:

答案 0 :(得分:0)

您是正确的,默认的“单击文本框”会更改插入符号的位置,从而清除所有选定的文本。但是您可以恢复它。

首先添加2个int var来存储选择“开始”和“长度”,然后将“开始”初始化为-1以表示未设置:

private int SelectedStart = -1;
private int SelectedLength = 0;

然后为TextBox的Leave事件创建一个处理程序,并在失去焦点时保存当前选定文本的开始和长度。

private void textBox1_Leave (object sender, EventArgs e)
{
    SelectedStart = textBox1.SelectionStart;
    SelectedLength = textBox1.SelectionLength;
}

最后,为TextBox的Click事件创建一个处理程序,如果我们以前保存了Start和Length,则将它们还原到TextBox,然后将Start设置为-1表示不再进行设置(这允许在文本框中进行正常的点击行为) 是重点)。

private void textBox1_Click (object sender, EventArgs e)
{
    if (SelectedStart != -1) {
        textBox1.SelectionStart = SelectedStart;
        textBox1.SelectionLength = SelectedLength;
        SelectedStart = -1;
    }
}

答案 1 :(得分:0)

使用Control.Tag属性设置bool标志以选择或取消选择TextBox文本:

private void TextBox_Click(object sender, EventArgs e)
{
    TextBox txtBox = (TextBox)sender;
    txtBox.SelectionStart = 0;
    // First click will select the text
    if (txtBox.Tag == null)
    {
        txtBox.Tag = true;
        txtBox.SelectionLength = txtBox.Text.Length;
    }
    // Second click will deselect the text
    else
    {
        txtBox.Tag = null;
        txtBox.SelectionLength = 0;
    }
}