الگوریتم زیر رو نوشوتم ف میشه با اون تشخیص داد که آیا متن انتخاب شده درون دو پرانتز قرار گرفته یا نه ؟
تابع های پیمایش به چپ و راست
ما چهار تابع داریم .
PrivateFunction OpenParanCheckerLeft(ByVal ObjTextbox AsObject) AsInteger
Dim Txt As TextBox = DirectCast(ObjTextbox, TextBox)
'If (InStrRev1(Txt.SelectionStart, Txt.Text, "((")) <> 0 Then
' Return True
'Else
' Return False
'End If
Return InStrRev1(Txt.SelectionStart, Txt.Text, "((")
EndFunction
PrivateFunction CloseParanCheckerRight(ByVal ObjTextbox AsObject) AsInteger
Dim Txt As TextBox = DirectCast(ObjTextbox, TextBox)
'If (InStr(Txt.SelectionStart, Txt.Text, "))")) <> 0 Then
' Return True
'Else
' Return False
'End If
Return (InStr(Txt.SelectionStart, Txt.Text, "))"))
EndFunction
PrivateFunction OpenParanCheckerRight(ByVal ObjTextbox AsObject) AsInteger
Dim Txt As TextBox = DirectCast(ObjTextbox, TextBox)
'If (InStr(Txt.SelectionStart, Txt.Text, "((")) <> 0 Then
' Return True
'Else
' Return False
'End If
Return (InStr(Txt.SelectionStart, Txt.Text, "(("))
EndFunction
PrivateFunction CloseParanCheckerLeft(ByVal ObjTextbox AsObject) AsBoolean
Dim Txt As TextBox = DirectCast(ObjTextbox, TextBox)
If (InStrRev1(Txt.SelectionStart, Txt.Text, "))")) <> 0 Then
ReturnTrue
Else
ReturnFalse
EndIf
EndFunction
1- یکی به دنبال )) از سمت چپ
2- یکی به دنبال )) از سمت راست
3- یکی به دنبال (( از سمت چپ
4- یکی بدنبال (( از سمت راست
و نحوه س استفاده از این تابع ها بصورت زیر هست .
Dim flag1 = False, flag2 AsBoolean = False
Dim PosOpen = 0, PosClose AsInteger = 0
'setp 1
PosClose = CloseParanCheckerLeft(TextBox1)
PosOpen = OpenParanCheckerLeft(TextBox1)
If PosOpen > PosClose Then
flag1 = True
Else
flag1 = False
EndIf
PosOpen = OpenParanCheckerRight(TextBox1)
PosClose = CloseParanCheckerRight(TextBox1)
If PosOpen > PosClose Then
flag2 = True
Else
flag2 = False
EndIf
If (flag1 = TrueAnd flag2 = True) Then
MessageBox.Show(" ", "", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Else
MessageBox.Show(" ", "", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
EndIf
البته نیاز به کمی ویرایش داره ، اگه کسی از دوستان ، فلوچارت این الگوریتم رو هم خواست بگه تا بزارمش .
حالا باید کاری کنیم تا هنگامی که کلید delete زده می شه در textbox اگر وسط دو پرانتز نبود حذف نشه .