0

我的程序使用堆栈来检查编程语句或公式是否具有平衡括号。一切正常,除了我的生活我似乎无法找到一种方法在我按下按钮检查 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) { bool flag; if ( ch == "(" || ch == ")") flag = true; 否则标志=假;返回标志;}

4

1 回答 1

1

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

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

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

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

HideSelection您可以通过修改property的值来更改此行为,您可以在设计器中使用 Properties Window 或通过代码执行此操作:

txtParens.HideSelection = false;

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

于 2013-03-14T06:10:53.690 回答