我想突出显示或从C#中的文本框中选择一个字符

时间:2013-03-14 05:36:29

标签: c# .net winforms textbox selection

我的程序使用堆栈来检查编程语句或公式是否具有平衡括号。一切都有效,除了我的生活,我似乎无法找到一种方法来突出显示和不平衡的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)         {             布尔旗;             if(ch ==“(”|| ch ==“)”)                 flag = true;              其他                 flag = false;                    返回标志;         }

1 个答案:

答案 0 :(得分:1)

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

  

首先使用txtParens.Focus();

将焦点设置为文本框

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

您可以在“运行”对话框中自行验证。首次打开时,“打开”文本框具有焦点,并且选中并突出显示其包含的任何文本。但是,如果按 Tab 键将焦点移动到底部的其中一个按钮,则选择突出显示会立即消失。文本框中的文本仍然处于选中状态(如果 Tab ,则会再次突出显示),但选择不会突出显示,因为控件已失去焦点。

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

txtParens.HideSelection = false;

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