我的程序使用堆栈来检查编程语句或公式是否具有平衡括号。一切都有效,除了我的生活,我似乎无法找到一种方法来突出显示和不平衡的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; 返回标志; }
答案 0 :(得分:1)
Fendy在评论中发布了解决方案:
首先使用
将焦点设置为文本框txtParens.Focus();
您必须这样做的原因是Windows控件不会(默认情况下)显示当前选择,除非它们具有焦点。这也适用于文本框。
您可以在“运行”对话框中自行验证。首次打开时,“打开”文本框具有焦点,并且选中并突出显示其包含的任何文本。但是,如果按 Tab 键将焦点移动到底部的其中一个按钮,则选择突出显示会立即消失。文本框中的文本仍然处于选中状态(如果 Tab ,则会再次突出显示),但选择不会突出显示,因为控件已失去焦点。
您可以通过修改HideSelection
property的值来更改此行为,您可以使用“属性”窗口或通过代码在设计器中执行此操作:
txtParens.HideSelection = false;
将HideSelection
设置为true将使用默认行为:当控件失去焦点时,所选文本不会突出显示。将其设置为false
可确保所选文本始终保持突出显示,即使控件失去焦点也是如此。