当用户单击框时,我需要在TextBox中选择文本。如果已经选择了文本,则它必须是常规光标。因此,在所有文本框的click事件上,我都有以下代码:
TextBox t = (TextBox)sender;
bool alreadyselected = t.SelectedText == t.Text;
if (!alreadyselected) t.SelectAll();
问题是,在到达点击事件时,t.SelectedText
为空
因此即使单击多次,全文也始终会被选中
如果可以的话,我希望能同时针对所有文本框提供解决方案
答案 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;
}
}