PDA

View Full Version : حرفه ای: انتقال فوکوس در یک جای خاص در یک textbox



milad.biroonvand
یک شنبه 02 اسفند 1388, 16:52 عصر
سلام دوستان ، من یک رشته به صورت زیر دارم .



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


این رشته در یک جعبه متن نوشته شده ، حالا می خوام به هر بار زدن کلید tab در textbox مکان نما به وسط دو پرانتز بره ، مثلا اول برای اولین بار با زدن دکمه tab به وسط دو پرانتز اول با دوبار زدن tab به وسط دو پرانتز دوم برود .

sina_saravi1
یک شنبه 02 اسفند 1388, 22:03 عصر
سلام دوست من

این کار به راحتی کد زیر قابل انجامه


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Select(10, 0)
TextBox1.Focus()
End Sub

sina_saravi1
یک شنبه 02 اسفند 1388, 22:07 عصر
کد بالا برای انتقال نشانه گر به جای خاصی بود
ولی اگه بخواین با زدن کلید تب به پرانتز خاصی برین کمی غیر منطقیه
چون با زدن کلید تب فوکوس به کنترل دیگه ای در فرم انتقال پیدا میکنه
وبرای این که این اتفاق نیفته باید خاصیت TabStop همه ی کنترل ها رو برابر False کنید

شما میتونید از دکمه ی دیگه ای استفاده کنید
اگه نتونستید با کد بالا کارتونو راه بندازین اطلاع بدین تا بیشتر کمکتون کنم

amin_iman82
دوشنبه 03 اسفند 1388, 12:39 عصر
داخل رخداد TextBox1_KeyDown کد زیر رو بنویسید

اگه خواستید به جایه Keys.Enter بذارید Keys.Tab

لطفا تشکر یادتون نره.
آدم توی این سایت دپرس میشه ، هیچکی تشکر نمیکنه. :ناراحت:


If e.KeyCode = Keys.Enter Then

TextBox1.SelectionStart = InStr(TextBox1.SelectionStart + 1, TextBox1.Text, "(( ))")

End If

milad.biroonvand
دوشنبه 03 اسفند 1388, 15:43 عصر
سلام دوست من

این کار به راحتی کد زیر قابل انجامه


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Select(10, 0)
TextBox1.Focus()
End Sub


با تشکر از جوابتون . جواب کاملا درست بود ، کد خوبی بود .

milad.biroonvand
دوشنبه 03 اسفند 1388, 15:44 عصر
اگر هم کسی خواست ، هنگامیکه ماوس بر روی textbox حرکن کرد ، هر جا که ماوس اونجا رفت اشاره گر بیاد اونجا می تونی هاز کد زیر استفاده کنه




Private Sub textbox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles txtSentenceQuestion1.MouseMove
Dim P As New Int32
P = textbox1.GetCharIndexFromPosition(New Point(e.X, e.Y))
textbox1.Select(P, 0)
textbox1.Focus()
End Sub

milad.biroonvand
دوشنبه 03 اسفند 1388, 15:50 عصر
کد بالا برای انتقال نشانه گر به جای خاصی بود
ولی اگه بخواین با زدن کلید تب به پرانتز خاصی برین کمی غیر منطقیه
چون با زدن کلید تب فوکوس به کنترل دیگه ای در فرم انتقال پیدا میکنه
وبرای این که این اتفاق نیفته باید خاصیت TabStop همه ی کنترل ها رو برابر False کنید

شما میتونید از دکمه ی دیگه ای استفاده کنید
اگه نتونستید با کد بالا کارتونو راه بندازین اطلاع بدین تا بیشتر کمکتون کنم


آره این کار با کلید تب امکان پذیر نیست ، حتی اگه tab stop رو برابر false قرار بدی ، ولی بد نیست اگه به جای اون از دکمه فلش سمت راست استفاده بکنیم .

milad.biroonvand
دوشنبه 03 اسفند 1388, 15:53 عصر
داخل رخداد TextBox1_KeyDown کد زیر رو بنویسید





اگه خواستید به جایه Keys.Enter بذارید Keys.Tab




لطفا تشکر یادتون نره.


آدم توی این سایت دپرس میشه ، هیچکی تشکر نمیکنه. :ناراحت:




If e.KeyCode = Keys.Enter Then


TextBox1.SelectionStart = InStr(TextBox1.SelectionStart + 1, TextBox1.Text, "(( ))")


End If




کدت درسته ، فقط باید به جای keys.enter باید keys.right رو نوشت که بشه با کلید فلش سمت راست اینکار رو انجام داد ، حالا اگر بخوایم پیمایش به سمت چپ باشه از چه کدی باید استفاده کرد ؟

amin_iman82
دوشنبه 03 اسفند 1388, 16:17 عصر
حالا اگر بخوایم پیمایش به سمت چپ باشه از چه کدی باید استفاده کرد ؟اینم از این ، هم به راست پیمایش داره هم به چپ.
بگید ایول امین.

تشکر لطفا :لبخند:

توجه : کد تغییر کرده و بهینه شد (حالت گردشی داره)



If e.KeyCode = Keys.Right Then

TextBox1.SelectionStart = InStr(TextBox1.SelectionStart + 1, TextBox1.Text, "(( ))")

ElseIf e.KeyCode = Keys.Left Then

For cnt As Integer = TextBox1.SelectionStart - 5 To 1 Step -1

If InStr(Mid(TextBox1.Text, 1, cnt), "(( ))") = 0 Then
TextBox1.SelectionStart = TextBox1.Text.Length
End If

If Mid(TextBox1.Text, cnt, 5) = "(( ))" Then
TextBox1.SelectionStart = cnt + 2
Exit Sub
End If

Next

End If

milad.biroonvand
دوشنبه 03 اسفند 1388, 16:33 عصر
اینم از این ، هم به راست پیمایش داره هم به چپ.
بگید ایول امین.

تشکر لطفا :لبخند:



If e.KeyCode = Keys.Right Then

TextBox1.SelectionStart = InStr(TextBox1.SelectionStart + 1, TextBox1.Text, "(( ))")

ElseIf e.KeyCode = Keys.Left Then

For cnt As Integer = TextBox1.SelectionStart - 5 To 1 Step -1

If Mid(TextBox1.Text, cnt, 5) = "(( ))" Then
TextBox1.SelectionStart = cnt + 2
Exit Sub
End If

Next

End If



سمت چپ کار نمی کنه .

amin_iman82
دوشنبه 03 اسفند 1388, 16:52 عصر
پست قبلیم رو ویرایش کردم وکد رو تغییر دادم.

البته کد اولی روهم تست کردم جواب دادها. اما به هرحال این بهتره.

milad.biroonvand
سه شنبه 04 اسفند 1388, 09:11 صبح
اینم از این ، هم به راست پیمایش داره هم به چپ.
بگید ایول امین.

تشکر لطفا :لبخند:

توجه : کد تغییر کرده و بهینه شد (حالت گردشی داره)



If e.KeyCode = Keys.Right Then

TextBox1.SelectionStart = InStr(TextBox1.SelectionStart + 1, TextBox1.Text, "(( ))")

ElseIf e.KeyCode = Keys.Left Then

For cnt As Integer = TextBox1.SelectionStart - 5 To 1 Step -1

If InStr(Mid(TextBox1.Text, 1, cnt), "(( ))") = 0 Then
TextBox1.SelectionStart = TextBox1.Text.Length
End If

If Mid(TextBox1.Text, cnt, 5) = "(( ))" Then
TextBox1.SelectionStart = cnt + 2
Exit Sub
End If

Next

End If




این کدی که نوشتی برا پیمایش به راست جواب میده ولی برا پیمایش به چپ مشکل داره .

milad.biroonvand
سه شنبه 04 اسفند 1388, 09:14 صبح
من از کد زیر برا پیمایش به سما چپ و راست استفاده کردم .




If e.KeyCode = Keys.Right Then
TextBox1.SelectionStart = InStr(TextBox1.SelectionStart + 1, TextBox1.Text, "((")
ElseIf e.KeyCode = Keys.Left Then
TextBox1.SelectionStart = InStrRev1(TextBox1.SelectionStart - 1, TextBox1.Text, "))")
EndIf


دستور INSTR معکوس رو خودم نوشتم ، بطوریکه از آخر به اول جستجو می کنه بعد از اون مانند INSTR استفاده کردم .

کد دستور INSTR معکوس





Function InStrRev1(ByVal Start As Integer, ByVal pStr As String, ByVal pItem As String) As Integer
For i As Integer = Start To 1 Step -1
If Mid(pStr, i, pItem.Length) = pItem Then
Return i
End If
Next i
End Function