gpt4 book ai didi

.net - 使 WinForms TextBox 的行为类似于浏览器的地址栏

转载 作者:行者123 更新时间:2023-12-03 04:21:57 24 4
gpt4 key购买 nike

当 C# WinForms 文本框获得焦点时,我希望它的行为类似于浏览器的地址栏。

要了解我的意思,请单击网络浏览器的地址栏。您会注意到以下行为:

  1. 如果文本框之前未获得焦点,则单击文本框应选择所有文本。
  2. 在文本框中按下鼠标并拖动应该仅选择我用鼠标突出显示的文本。
  3. 如果文本框已获得焦点,则单击不会选择所有文本。
  4. 以编程方式或通过键盘 Tab 键聚焦文本框应选择所有文本。

我想在 WinForms 中做到这一点。

最快的枪声警报:请在回答之前阅读以下内容!谢谢大家。 :-)

Calling .SelectAll() during the .Enter or .GotFocus events won't work because if the user clicked the textbox, the caret will be placed where he clicked, thus deselecting all text.

Calling .SelectAll() during the .Click event won't work because the user won't be able to select any text with the mouse; the .SelectAll() call will keep overwriting the user's text selection.

Calling BeginInvoke((Action)textbox.SelectAll) on focus/enter event enter doesn't work because it breaks rule #2 above, it will keep overriding the user's selection on focus.

最佳答案

首先谢谢各位的解答!总共 9 个答案。谢谢。

坏消息:所有答案都有一些怪癖或不太正确(或根本不正确)。我已为您的每篇帖子添加了评论。

好消息:我找到了一种让它发挥作用的方法。这个解决方案非常简单,似乎适用于所有场景(按下鼠标、选择文本、切换焦点等)

bool alreadyFocused;

...

textBox1.GotFocus += textBox1_GotFocus;
textBox1.MouseUp += textBox1_MouseUp;
textBox1.Leave += textBox1_Leave;

...

void textBox1_Leave(object sender, EventArgs e)
{
alreadyFocused = false;
}


void textBox1_GotFocus(object sender, EventArgs e)
{
// Select all text only if the mouse isn't down.
// This makes tabbing to the textbox give focus.
if (MouseButtons == MouseButtons.None)
{
this.textBox1.SelectAll();
alreadyFocused = true;
}
}

void textBox1_MouseUp(object sender, MouseEventArgs e)
{
// Web browsers like Google Chrome select the text on mouse up.
// They only do it if the textbox isn't already focused,
// and if the user hasn't selected all text.
if (!alreadyFocused && this.textBox1.SelectionLength == 0)
{
alreadyFocused = true;
this.textBox1.SelectAll();
}
}

据我所知,这会导致文本框的行为与网络浏览器的地址栏完全相同。

希望这可以帮助下一个尝试解决这个看似简单的问题的人。

再次感谢大家,你们的所有回答帮助我走上了正确的道路。

关于.net - 使 WinForms TextBox 的行为类似于浏览器的地址栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/97459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com