【问题标题】:How to detect if cursor position is between certain characters in richtextbox如何检测光标位置是否在富文本框中的某些字符之间
【发布时间】:2017-01-07 10:04:01
【问题描述】:

所以我正在尝试在 Winforms 中创建一个编辑器应用程序,它允许我进行自动括号对齐。我目前有一个richtextbox,当我按下左括号时会创建一个右括号。

我要做的下一件事是当我的光标位于左括号和右括号之间并按 Enter 键时,右括号会比左括号更远 2 行,并且光标会被放置在更远的一行标签已插入。

我的主要问题是,如何检测光标是否在 2 个特定字符之间?右括号和光标的位置是可选的。

【问题讨论】:

  • 为什么不能查看SelectionStart 属性? stackoverflow.com/questions/526540/…
  • 我不知道如何检查
  • 您在评论中添加的链接是如何将文本放在光标处。我需要检查光标是否在某些字符之间
  • 从中获取索引,执行 +1 和 -1 即可获得起点和终点索引。在中间插入你的字符串。我无法编写示例代码,因为我正在通过电话访问。
  • 一个示例代码会很方便。因为我看不到这如何检查我的光标是否在 { 和 } 之间

标签: c# winforms visual-studio visual-studio-2015


【解决方案1】:
public void addTabToText()
    {
      int caretPos = myTextBox.SelectionStart; //Get the start position
      if(caretPos != 0 && caretPos!=myTextBox.Text.Length) //if not at the end or start
      {
        if(myTextBox.Text[caretPos-1]=='(' && myTextBox.Text[caretPos]==')'){
          myTextBox.Text = myTextBox.Text.Insert(caretPos, "  ");
          //to change cursor position
          myTextBox.SelectionStart = caretPos + 2; // length of string added 
          myTextBox.SelectionLength = 0;
        }
      }
    }

在这里,我使用SelectionStart 检查前一个字符和下一个字符。您可以从 Enter 按下事件中调用它。

【讨论】:

  • 不幸的是它不起作用。我唯一改变的是:myTextBox 现在是 editorTB; ( 和 ) 现在是 { 和 }。我在按键事件中调用该函数。
  • 您遇到了什么问题?错误/输出是什么?
  • 我没有收到任何错误/输出。它只是没有做任何事情。我认为这是因为对 caretpos 的检查不正确,而且它永远不会是 True
  • 您能否调试并告诉我caretPos 的值是否为正确输入?
  • caretPos 的值每次都会改变。假设我有一行这样的文本:“Line of text {}”然后 caretPos 将等于 14。如果我有这样一行文本:“One more line {}”然后 caretPos 等于15
猜你喜欢
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 2013-03-16
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多