【问题标题】:I want to Highlight or select one character out of my textbox in C#我想在 C# 的文本框中突出显示或选择一个字符
【发布时间】:2013-03-14 05:36:29
【问题描述】:

我的程序使用堆栈来检查编程语句或公式是否具有平衡括号。一切正常,除了我的生活我似乎无法找到一种方法在我按下按钮检查 Parens 时输入的同一个文本框中突出显示和不平衡的一对 Parens。

这是我的参考代码:

private void btnCheckParens_Click(object sender, EventArgs e)
{
    Stack leftParens = new Stack();
    Stack rightParens = new Stack();
    string expression = txtParens.Text;
    string ch;
    int indexOfParens; 
    for ( int i = 0; i < expression.Length; i++)
    {
    ch = expression.Substring(i,1);

    if (isParenthesis(ch))
    {
        if (ch == "(")
            leftParens.Push(ch);
        else
            rightParens.Push(ch);

    }

}
    if (!(leftParens.Count == rightParens.Count))
    {
        if (leftParens.Count > rightParens.Count)
        {
            indexOfParens = expression.LastIndexOf("(");
            txtParens.SelectionStart = indexOfParens;
            txtParens.SelectionLength = 1;
        }
        else
            indexOfParens = expression.LastIndexOf(")");
        txtParens.SelectionStart = indexOfParens;
        txtParens.SelectionLength = 1;
    }
    else
        MessageBox.Show("Number of parens are balanced!","success");



    }

static bool isParenthesis(string ch) { 布尔标志; 如果 ( ch == "(" || ch == ")") 标志=真; 别的 标志=假; 返回标志; }

【问题讨论】:

  • 你可能会在这里找到答案stackoverflow.com/questions/1380610/…
  • 那么,究竟哪一部分不工作?您检测到括号的部分,还是您在文本框中突出显示/选择字符的部分?
  • 您的意图是在文本框中突出显示一个字符是吗?你有要突出显示的字符或其索引吗?
  • 首先使用 txtParens.Focus() 将焦点设置到文本框;
  • 不工作的部分是我在文本框中突出显示/选择字符的部分。我有角色的索引。

标签: c# .net winforms textbox selection


【解决方案1】:

Fendy 在评论中发布了解决方案:

首先使用txtParens.Focus();将焦点设置到文本框

您必须这样做的原因是因为 Windows 控件(默认情况下)不显示当前选择,除非它们具有焦点。这也适用于文本框。

您可以在“运行”对话框中自己验证这一点。当它第一次打开时,“打开”文本框具有焦点,并且它包含的任何文本都被选中并突出显示。但是,如果您按 Tab 键将焦点移动到底部的按钮之一,则选择突出显示会立即消失。文本框中的文本仍处于选中状态(如果您返回 Tab 则会再次突出显示),但由于控件失去焦点,所选内容未突出显示。

您可以通过修改HideSelection property 的值来更改此行为,您可以在设计器中使用“属性”窗口或通过代码执行此操作:

txtParens.HideSelection = false;

HideSelection 设置为true 使用默认行为:当控件失去焦点时,选定的文本不会突出显示。将其设置为 false 可确保所选文本始终保持突出显示,即使控件失去焦点也是如此。

【讨论】:

  • 如何修改我的代码,以便不仅突出显示不平衡的括号,还突出显示任意数量的不平衡括号?
  • @IvanSoria 文本框控件不支持不连续的选择。您可以选择任意数量的字符,但它们都必须排成一排。 RichTextBox 控件也不支持此功能,但您可以使用 SelectionBackColor property 对其进行模拟。当然,这需要用RichTextBox 控件替换您当前的TextBox 控件,并重写所有受影响的代码。
  • 我从来没有使用过 RichtextBox 控件,如果不是太多,你介意告诉我它的外观吗?
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 2013-07-15
相关资源
最近更新 更多