程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了尝试在焦点/点击时选择 TextBox 中的所有文本大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决尝试在焦点/点击时选择 TextBox 中的所有文本?

开发过程中遇到尝试在焦点/点击时选择 TextBox 中的所有文本的问题如何解决?下面主要结合日常开发的经验,给出你关于尝试在焦点/点击时选择 TextBox 中的所有文本的解决方法建议,希望对你解决尝试在焦点/点击时选择 TextBox 中的所有文本有所启发或帮助;

我尝试模仿用户单击用户名字段(例如)时的行为,并且所有文本(名称)都将被自动选择,以便更轻松地将其替换为新文本。但是当用户再次单击该字段时,文本/名称变为未选中状态,因此用户可以继续从光标处写入文本。我相信每个人都知道我想描述什么,因为当我们在文本字段中书写或想要修改其内容时,我们都遇到过很多次...

所以问题是当我使用 ENter 焦点事件并应用 SELEctAll() 时,根本不起作用!文本仍然没有被选中。我也尝试使用 Click 事件,效果很好,但是我在第二次单击时遇到了困难,因为所有鼠标单击再次运行 SELEctAll() 方法,文本始终处于选中状态.. 可能我可以使用全局变量来存储文本和更改状态反之亦然,但如果不需要,我不想使用任何额外的变量(每个用于所有文本框......不)。

应该有一个简单而优雅的解决方案,因为许多应用程序和网站都使用这种行为来让用户的生活更轻松。我阅读了一些论坛并找到了一些解决方案,但它们看起来比我希望的要复杂得多。

这是我代码的相关部分……没什么特别的!

    private voID G_tbx_canvasSize_Enter(object sender,EventArgs E)
    {
        (sender as TextBoX).SELEctAll();
    }

这应该以这种方式工作:

  • 用户点击文本框 (TB)
  • 关注结核病
  • 运行代码并选择所有文本
  • 用户再次点击 TB
  • 由于这已经集中了,代码将不会再次运行,因此默认情况下文本取消选择自身..(我测试过!)
  • 如果用户点击离开并再次点击 TB,一切都会一次又一次地运行..

请帮忙!我无法弄清楚为什么会发生任何问题,它不应该发生...

提前致谢!

解决方法

您需要结合 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;
}

您希望单击事件仅在刚刚输入文本框时选择所有文本。 Enter 事件中存在额外的 SELEctAll 调用,@R_169_6607@它,正常的“当这个控件被标签到时选择所有文本”行为不会发生

@jimi 建议的另一种方法是执行以下操作:

private void textBox3_Enter(object sender,EventArgs E)
{
    BeginInvoke(new Action(() => (sender as TextBoX).SELEctAll()));
}

这会将 SELEctAll 调用发送到表单的消息队列中。相关代码将在初始鼠标单击的所有消息处理完成后运行。

,

我不确定您是否应该等待 GotFocus 事件。也许对 Enter 事件做出反应会更好。

但即使您这样做,这也无济于事,因为在每个这些事件之后,您都会获得一个 TextBox.Click,这将取消选择您的文本。您将获得 TextBox.Click 事件。

如果您经常使用具有这种特殊行为的 TextBox,请虑创建一个从 TextBox 派生的 TextBoxWithSpecialClickBehaviour 类,并覆盖 OnEnter 和 OnClick。

class TextBoxWithSpecialClickBehaviour : TextBox
{
    public bool SELEctAllTextOnGetFocus {get; set;} = true;

    // TODO: override some default behaviour
}

覆盖 OnEnter 和 OnClick

protected override void OnEnter (EventArgs E)
{
    // SELEct all text
    if (this.SELEctAllTextOnGetFocus)
        base.SELEctAll();

     // raise the event
     base.onEnter(E);
}

我认为您应该先选择文本,然后其他人会收到通知。因此,如果事件处理程序询问是否选择了文本,他们会得到正确的答案。但请注意,这些事件处理程序可能会再次取消选择文本。

protected virtual void OnClick (EventArgs E)
{
    if (this.SELEctAllTextOnGetFocus)
    {
        // if nothing SELEcted: SELEct all,if anything SELEcted: deSELEct all
        if (base.SELEctionLength = 0)
            base.SELEctAll();
        else
            base.SELEctionLength = 0;
    }
    base.onClick();
}

实验一下:覆盖 OnEnter 还是 OnGotFocus?也许您还需要设置 TextBox.SELEctionStart。

如果你不打算多次重复使用这个TextBox,对相应的事件做出反应就足够了。

便说一句:您确定要这种行为吗?如果用户点击,然后开始编辑并点击编辑文本中的某处,因为他想选择一些文本以将其复制粘贴到他正在编辑的文本的不同部分,会发生什么情况。

  • 文本 ABCDEFG
  • 点击 TextBox ABCDEFG 完全选中
  • 在 C 和 D 之间单击:未选择任何内容
  • 将鼠标拖到 F: ABCDEFG 选择
  • Ctrl C 复制文本。文本还必须被选中吗?
  • 在 A 和 B 之间单击以粘贴文本。
  • 因为点击ABCDEFG完全选中

你确定要这个吗?运营商是否期待这一点?

大佬总结

以上是大佬教程为你收集整理的尝试在焦点/点击时选择 TextBox 中的所有文本全部内容,希望文章能够帮你解决尝试在焦点/点击时选择 TextBox 中的所有文本所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: