Bus*_*kie 0 c# events textbox click winforms
我尝试模仿用户单击用户名字段(例如)时的行为,并且将自动选择所有文本(名称),以便更轻松地用新文本替换它。但是,当用户再次单击该字段时,文本/名称将变为未选中状态,因此用户可以继续从光标写入文本。我确信每个人都知道我想描述什么,因为当我们在文本字段中写入或想要修改其内容时,我们都多次遇到过这种情况......
所以问题是当我使用 Enter focus 事件并应用 SelectAll() 时,根本不起作用!文本仍未选择。我也尝试使用 Click 事件,效果很好,但是第二次单击时遇到了困难,因为所有鼠标单击再次运行 SelectAll() 方法,文本始终仍然处于选中状态。也许我可以使用存储选择状态的全局变量文本和更改状态反之亦然,但如果没有必要,我不想使用任何额外的变量(每个变量都用于所有 TextBox...不)。
应该有一个简单而优雅的解决方案,因为许多应用程序和网站都使用这种行为来使用户的生活更轻松。我阅读了一些论坛并找到了一些解决方案,但它们看起来比我希望的更复杂。
这是我的代码的相关部分......没什么特别的!
private void G_tbx_canvasSize_Enter(object sender, EventArgs e)
{
(sender as TextBox).SelectAll();
}
Run Code Online (Sandbox Code Playgroud)
这应该以这种方式工作:
请帮忙!我不明白为什么会出现这种情况,这不应该发生......
提前致谢!
您需要结合 Enter 和 Click 事件。当处理程序连接到适当的事件时,此代码适用于我(在名为 textBox2 的文本框上):
private bool textBox2JustEntered = false;
private void textBox2_Enter(object sender, EventArgs e)
{
textBox2.SelectAll();
textBox2JustEntered = true;
}
private void textBox2_Click(object sender, EventArgs e)
{
if (textBox2JustEntered)
{
textBox2.SelectAll();
}
textBox2JustEntered = false;
}
Run Code Online (Sandbox Code Playgroud)
您希望单击事件仅在刚刚输入文本框时选择所有文本。Enter 事件中存在额外的SelectAll调用,因为如果没有它,正常的“选择此控件切换到的位置时选择所有文本”行为就不会发生。
正如 @jimi 所建议的,另一种方法是执行以下操作:
private void textBox3_Enter(object sender, EventArgs e)
{
BeginInvoke(new Action(() => (sender as TextBox).SelectAll()));
}
Run Code Online (Sandbox Code Playgroud)
这会将调用发布SelectAll到表单的消息队列中。相关代码将在初始鼠标单击的所有消息处理完成后运行。
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |