نمایش نتایج 1 تا 20 از 20

نام تاپیک: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

  1. #1
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    Cool غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    سلام دوستان عزیز

    من یک رشته به صورت زیر دارم :

          

    Dim str AsString
    str = "my name is milad biroonvand(( )) and you is my computer (( )) .he is a good (( )) boy"



    حالا باید چکاری انجام دهیم ، تا فقط قسمت هایی که داخل دو پرانتز هستند قابل ویرایش (حذف و نوشتن) باشند و سایر قسمت ها قابل ویرایش نباشند ؟

  2. #2
    کاربر دائمی آواتار amin_iman82
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    Visual Studio.net
    پست
    205

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    از برنامه نویسی با پشته باید استفاده کنی. (درس ساختمان داده)
    شما داری چه برنامه ای درست میکنی ، سوالات خفنن

    اگه مشکل حل نشد بگو تا بنویسم؟

  3. #3
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    Cool نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط amin_iman82 مشاهده تاپیک
    از برنامه نویسی با پشته باید استفاده کنی. (درس ساختمان داده)
    شما داری چه برنامه ای درست میکنی ، سوالات خفنن

    اگه مشکل حل نشد بگو تا بنویسم؟

    سلام دوست عزیز من یه برنامه تجاری دارم می نویسم ، من با پشته تو برنامه نویسی هنوز کار نکردم ، اگه می تونی کدش رو اینجا بزار .

  4. #4
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط amin_iman82 مشاهده تاپیک
    از برنامه نویسی با پشته باید استفاده کنی. (درس ساختمان داده)
    شما داری چه برنامه ای درست میکنی ، سوالات خفنن

    اگه مشکل حل نشد بگو تا بنویسم؟


    برنامه نویسی با پشته هم نیازی نیست ، ما می تونیم از کد در رویداد keydown فثطذخط بنویسیم

    ابتدا باید دو تابع زیر رو بنویسیم

            
    PrivateFunction OpenParanChecker(ByVal ObjTextbox AsObject) AsBoolean
    Dim Txt As TextBox = DirectCast(ObjTextbox, TextBox)
    If (InStrRev1(Txt.SelectionStart, Txt.Text, "((")) <> 0 Then
    ReturnTrue
    Else
    ReturnFalse
    EndIf
    EndFunction
    PrivateFunction CloseParanChecker(ByVal ObjTextbox AsObject) AsBoolean
    Dim Txt As TextBox = DirectCast(ObjTextbox, TextBox)
    If (InStr(Txt.SelectionStart, Txt.Text, "))")) <> 0 Then
    ReturnTrue
    Else
    ReturnFalse
    EndIf
    EndFunction



    با کد های زیر می تونیم ، تشخیص بدیم که آیا متن در قسمت ، وسط دو پرانتز انتخاب شده است یا نه . اگر هر دو تابع نتیجه true را دادند ، یعنی اینکه متن وسط دو پرانتز انتخاب شده است .

  5. #5
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط milad.biroonvand مشاهده تاپیک
    برنامه نویسی با پشته هم نیازی نیست ، ما می تونیم از کد در رویداد keydown فثطذخط بنویسیم

    ابتدا باید دو تابع زیر رو بنویسیم

            
    PrivateFunction OpenParanChecker(ByVal ObjTextbox AsObject) AsBoolean
    Dim Txt As TextBox = DirectCast(ObjTextbox, TextBox)
    If (InStrRev1(Txt.SelectionStart, Txt.Text, "((")) <> 0 Then
    ReturnTrue
    Else
    ReturnFalse
    EndIf
    EndFunction
    PrivateFunction CloseParanChecker(ByVal ObjTextbox AsObject) AsBoolean
    Dim Txt As TextBox = DirectCast(ObjTextbox, TextBox)
    If (InStr(Txt.SelectionStart, Txt.Text, "))")) <> 0 Then
    ReturnTrue
    Else
    ReturnFalse
    EndIf
    EndFunction



    با کد های زیر می تونیم ، تشخیص بدیم که آیا متن در قسمت ، وسط دو پرانتز انتخاب شده است یا نه . اگر هر دو تابع نتیجه true را دادند ، یعنی اینکه متن وسط دو پرانتز انتخاب شده است .

    ولی با این روش باز هم مشکل پیدا می کنه .

  6. #6
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    Cool نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    الگوریتم زیر رو نوشوتم ف میشه با اون تشخیص داد که آیا متن انتخاب شده درون دو پرانتز قرار گرفته یا نه ؟


    تابع های پیمایش به چپ و راست

    ما چهار تابع داریم .

      

    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 اگر وسط دو پرانتز نبود حذف نشه .
    آخرین ویرایش به وسیله milad.biroonvand : سه شنبه 04 اسفند 1388 در 12:54 عصر دلیل: اشتباه نوشته شدن یک کلمه

  7. #7
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    چرا اين قدر به خودتون زحمت مي ديد
    نيازي نيست از يک تکست باکس استفاده کنيد،‌از چند ليبل و چند تکست باکس استفاده کنيد ظاهر و استايل همه را مثل هم کنيد تا کاربر فکر کنه ليبل ، ادامه تکست باکس است، بعد براي قسمت پرانتز هم از تکست باکس استفاده کنيد
    در هنگام ورود و خروج متن ، با استفاده از همين پرانتز، متن را بين تکست ها و ليبل ها تقسيم نموده و مجددا الصاق نماييد
    فکر نکنم اين ايده مشکلي ايجاد کنه

  8. #8
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    يک ايده ديگه هم دارم :
    در رويداد KeyPress با استفاده از يک تايع تشخيص مي دهيم که SelectionStart يعني جائي که کرسر قرار داره، توي پرانتز هست يا نه؟؟ اگر توي پرانتز باشه، کد رو وارد کنه و گرنه وارد نکنه
    اگه نيازه بگيد تا اين کد رو تست کنم و همين جا بفرستم

  9. #9
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    Cool نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    يک ايده ديگه هم دارم :
    در رويداد KeyPress با استفاده از يک تايع تشخيص مي دهيم که SelectionStart يعني جائي که کرسر قرار داره، توي پرانتز هست يا نه؟؟ اگر توي پرانتز باشه، کد رو وارد کنه و گرنه وارد نکنه
    اگه نيازه بگيد تا اين کد رو تست کنم و همين جا بفرستم

    سلام

    حالا چطور میخوای تشخیص بدی که تو دو پرانتزه یا نه ، پس مجبوری از این کد استفاده بکنی .

  10. #10
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    Cool نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    يک ايده ديگه هم دارم :
    در رويداد KeyPress با استفاده از يک تايع تشخيص مي دهيم که SelectionStart يعني جائي که کرسر قرار داره، توي پرانتز هست يا نه؟؟ اگر توي پرانتز باشه، کد رو وارد کنه و گرنه وارد نکنه
    اگه نيازه بگيد تا اين کد رو تست کنم و همين جا بفرستم

    اگر کد بهتری داری ، اینجا بزار.

  11. #11
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    اين هم الگوريتم!! من که مشکل رو به کلي حل مي کنه (البته من با يک پرانتز ساختم شما مي تونيد دو پرانتزه کنيد))

    PrivateSub TextBox1_KeyPress(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    Dim tx As TextBox = TextBox1
    Dim str AsString = tx.Text & "()"
    Dim S1 AsInteger = str.IndexOf("(", tx.SelectionStart)
    Dim S2 AsInteger = str.IndexOf(")", tx.SelectionStart)
    If e.KeyChar = "("Or e.KeyChar = ")"Then e.Handled = True
    If S1 < S2 Then
    e.Handled = True
    EndIf
    EndSub

  12. #12
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط milad.biroonvand مشاهده تاپیک
    ولی با این روش باز هم مشکل پیدا می کنه .

    و این هم راه حل مشکلش که گفتم ؟

               

    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) Or (PosClose <> 0 And PosOpen = 0) 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


  13. #13
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    Cool نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    اين هم الگوريتم!! من که مشکل رو به کلي حل مي کنه (البته من با يک پرانتز ساختم شما مي تونيد دو پرانتزه کنيد))

    PrivateSub TextBox1_KeyPress(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    Dim tx As TextBox = TextBox1
    Dim str AsString = tx.Text & "()"
    Dim S1 AsInteger = str.IndexOf("(", tx.SelectionStart)
    Dim S2 AsInteger = str.IndexOf(")", tx.SelectionStart)
    If e.KeyChar = "("Or e.KeyChar = ")"Then e.Handled = True
    If S1 < S2 Then
    e.Handled = True
    EndIf
    EndSub

    سلام ، دوست عزیز

    خیلی عالی بود ، فقط باز هم یه مشکل داره ، باید کاربر اجازه نداشته باشه، که پرانتز ها رو پاک کنه ، چون اگر پرانتز ها رو پاک کنه دیگه نمی تونه خارج از پرانتز ها می تونه پیزی تایپ کنه ، باید یه راه برای حذف پرانتز ها بزاریم .

  14. #14
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    Cool نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط milad.biroonvand مشاهده تاپیک
    سلام ، دوست عزیز

    خیلی عالی بود ، فقط باز هم یه مشکل داره ، باید کاربر اجازه نداشته باشه، که پرانتز ها رو پاک کنه ، چون اگر پرانتز ها رو پاک کنه دیگه نمی تونه خارج از پرانتز ها می تونه پیزی تایپ کنه ، باید یه راه برای حذف پرانتز ها بزاریم .

    مشکلی که گفتم ، اگر کد رو به اینصورت در بیاریم حل می شه ،

                

    Dim tx As TextBox = textbox1
    Dim str AsString = tx.Text & "(())"
    Dim S1 AsInteger = str.IndexOf("((", tx.SelectionStart)
    Dim S2 AsInteger = str.IndexOf("))", tx.SelectionStart)
    If e.KeyChar = "(("Or e.KeyChar = "))"Then e.Handled = True
    If S1 < S2 Then
    e.Handled = True
    EndIf
    Dim x = textbox1.Text.Substring(textbox1.SelectionStart - 1, 1)
    If x = "("And Asc(e.KeyChar) = 8 Then
    e.Handled = True
    EndIf




    فقط یه مشکل دیگه پیش میاد ، موقعی که خارج از پرانتز ها کلید delete فشرده بشه ، باز هم متن پاک می کنه ، که اینکار نباید اتفاق بیفته ؟ این مشکل رو چطور باید حل کرد ؟

  15. #15
    کاربر دائمی آواتار Alghoochi
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    C:\Windows
    پست
    390

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    بهتر نیست از Regular Expression استفاده کنی؟

  16. #16
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    Cool نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط Alghoochi مشاهده تاپیک
    بهتر نیست از Regular Expression استفاده کنی؟
    سلام دوست عزیز ، منظور شما عبارت منظمه که با اونا مثلا می تونی یک ایمیل رو چک کنی یا چیز دیگه ای ؟ اگه می شه یکم بیشتر توضیح بده .

  17. #17
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط milad.biroonvand مشاهده تاپیک
    مشکلی که گفتم ، اگر کد رو به اینصورت در بیاریم حل می شه ،

                

    Dim tx As TextBox = textbox1
    Dim str AsString = tx.Text & "(())"
    Dim S1 AsInteger = str.IndexOf("((", tx.SelectionStart)
    Dim S2 AsInteger = str.IndexOf("))", tx.SelectionStart)
    If e.KeyChar = "(("Or e.KeyChar = "))"Then e.Handled = True
    If S1 < S2 Then
    e.Handled = True
    EndIf
    Dim x = textbox1.Text.Substring(textbox1.SelectionStart - 1, 1)
    If x = "("And Asc(e.KeyChar) = 8 Then
    e.Handled = True
    EndIf




    فقط یه مشکل دیگه پیش میاد ، موقعی که خارج از پرانتز ها کلید delete فشرده بشه ، باز هم متن پاک می کنه ، که اینکار نباید اتفاق بیفته ؟ این مشکل رو چطور باید حل کرد ؟
    يک کم به کد دقت کنيد، مي تونيد حلش کنيد
    به اين ترتيب که اين کد رو در رويداد KeyDown کپي کنيد و به جاي خطوطي که قرمز کردم، اول خط اين شرط رو اضافه کنيد

    if e.keycode=key.delete then ...
    دقيقا اين طور


    Dim tx As TextBox = textbox1
    Dim str AsString = tx.Text & "(())"
    Dim S1 AsInteger = str.IndexOf("((", tx.SelectionStart)
    Dim S2 AsInteger = str.IndexOf("))", tx.SelectionStart)

    If S1 < S2 Then
    if e.keycode =key.delete then e.Handled = True
    EndIf

    توجه:
    رويداد KeyPress بايد به حال خودش باشد فقط اين کد رو به رويداد Keydown اضافه کنيد

  18. #18
    کاربر دائمی آواتار Alghoochi
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    C:\Windows
    پست
    390

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط milad.biroonvand مشاهده تاپیک
    سلام دوست عزیز ، منظور شما عبارت منظمه که با اونا مثلا می تونی یک ایمیل رو چک کنی یا چیز دیگه ای ؟ اگه می شه یکم بیشتر توضیح بده .
    Regular Expression یعنی عبارات با معنا. تو همین سایت قبلا روش بحث شده بگردی پیدا می کنی.
    این مطلبم یاد بگیری بد نیست

  19. #19
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط Alghoochi مشاهده تاپیک
    Regular Expression یعنی عبارات با معنا. تو همین سایت قبلا روش بحث شده بگردی پیدا می کنی.
    این مطلبم یاد بگیری بد نیست

    سلام

    اگه میشه خودت لینک صفحشو بزار .

  20. #20
    کاربر دائمی آواتار milad.biroonvand
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران
    پست
    1,406

    نقل قول: غیر قابل ویرایش کردن ، قسمت های مشخص در textbox

    نقل قول نوشته شده توسط milad.biroonvand مشاهده تاپیک
    سلام

    اگه میشه خودت لینک صفحشو بزار .
    من با این عبارت قبلا در php با این روش کار کردم ولی تو وبی کار نکردم .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •