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 フラグ; if ( ch == "(" || ch == ")") フラグ = true; 他のフラグ = false; 戻りフラグ; }

4

1 に答える 1

1

フェンディはコメントで解決策を投稿しました:

最初に使用してフォーカスをテキストボックスに設定しますtxtParens.Focus();

これを行う必要がある理由は、フォーカスがない限り、Windowsコントロールは(デフォルトで)現在の選択を表示しないためです。これはテキストボックスにも当てはまります。

これは、[実行]ダイアログで自分で確認できます。最初に開いたとき、「開く」テキストボックスにフォーカスがあり、そこに含まれるすべてのテキストが選択されて強調表示されます。ただし、Tabキーを押してフォーカスを下部にあるボタンの1つに移動すると、選択のハイライトがすぐに消えます。テキストボックス内のテキストは引き続き選択されていますが(戻ると再び強調表示されますTab)、コントロールがフォーカスを失ったため、選択範囲は強調表示されません。

この動作を変更するには、HideSelectionプロパティの値を変更します。これは、デザイナーでプロパティウィンドウを使用するか、コードを使用して行うことができます。

txtParens.HideSelection = false;

trueに設定HideSelectionすると、デフォルトの動作が使用されます。コントロールがフォーカスを失ったときに、選択したテキストは強調表示されません。コントロールがフォーカスを失った場合でもfalse、選択したテキストが常に強調表示されたままになるように設定します。

于 2013-03-14T06:10:53.690 に答える