【问题标题】:Is there a way to make some piece of code work while textbox has focus? [closed]当文本框有焦点时,有没有办法让一些代码工作? [关闭]
【发布时间】:2019-06-27 19:30:29
【问题描述】:

我一直在尝试用文本框做一些事情。我总是需要检查 CaretIndex 属性是否低于 3。如果是,我需要将其设置回 3。我看到的唯一方法是循环遍历这段代码,而文本框有焦点。

if (textbox.CaretIndex < 3) textbox.CaretIndex = 3;

当文本框有焦点时,如何使这段代码循环?有 GotFocus 和 LostFocus 事件,但它们仅在我单击文本框时才起作用。

【问题讨论】:

  • &lt;Trigger Property="IsFocused" Value="True"&gt;&lt;Setter ... 可能会完成这项工作,具体取决于您的要求。您能否透露一下您需要执行什么样的“代码”,以及“循环工作”是什么意思?
  • @EdPlunkett 这段代码没什么特别的,只是为了检查 CaretIndex,所以我不能让它移动到另一个位置。 “循环工作”是指循环。
  • 你是否认为它“特别”并不重要。我要问的是你想在这里做什么?为什么会有这个事件?你能找到一些可以达到同样目的的other事件吗?必须是鼠标键吗?特殊性不是本质。我假设代码有某种目的,并且您有某种理由使用该事件而不是其他事件。
  • @EdPlunkett 好的。当我点击文本框时,我总是需要检查这个文本框中的 CaretIndex 是否大于 3。如果小于,我需要将其设置回 3。我不能使用 TextChanged,因为我也可以移动 Caret箭头键和鼠标。这就是我需要循环的原因。
  • 您尝试过SelectionChanged 事件吗? CaretIndex 不能在不更改选择的情况下更改。

标签: c# wpf text textfield


【解决方案1】:

听起来你真的只需要关注CaretIndex。最简单的方法是处理 TextBox 的 SelectionChanged 事件:插入符号是选择的一端,它是可以改变的一端。任何人使用鼠标或键盘更改插入符号位置的任何操作都会更改选择。

private void TextBox_SelectionChanged(object sender, RoutedEventArgs e)
{

    if (textbox.CaretIndex < 3) 
        textbox.CaretIndex = 3;
}
<TextBox SelectionChanged="TextBox_SelectionChanged"/>

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2014-03-04
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多