PDA

View Full Version : غیر فعال کردن کلید فشرده شده



myazdan
شنبه 28 خرداد 1390, 10:44 صبح
با سلام به همه دوستان

من توی برنامه خودم یک RichTextBox دارم و خاصیت KeyPreview فرمی که RichTextBox توی اون هست رو برابر با True و توی رویداد KeyDown فرم گفتم اگه کلید Enter فشرده شد یک پیغامی رو نمایش بده ، اما می خوام هنگامی که کلید Enter توی RichTextBox فشرده شد دیگه پیغام مربوط به رویداد KeyDown فرم نمایش داده نشه و فقط مکان نما یک سطر به پایین بره . دوستان در صورت امکان من رو راهنمایی کنن

با تشکر

juza66
شنبه 28 خرداد 1390, 11:13 صبح
سلام دوست عزیز

بیشتر توضیح بده که بدونیم کجا مشکل داری؟!

اگه میخوای با زدن Enter دکمه ی فشرده بشه و پیغامی نشون بده از خاصیت
Me.AcceptButton = buuton1 استفاده کن و بذار کنترل RichTextBox به حالت خودش باشه، اگه منظورت اینی باشه که من متوجه شده بودم!!

myazdan
شنبه 28 خرداد 1390, 11:27 صبح
با سلام دوباره

ببنین من نمی خوام از خاصیت AcceptButton استفاده کنم ، مشکل من اینجاست موقعی که من توی RichTextBox کلید Enter رو می زنم پیغامی که توی رویداد KeyDown گفته بودم به فشردن enter نمایش بده رو نشون میده که من نمی خوام این کار رو بکنه ( یعنی اون پیغام رو نشون نده و رویداد KeyDown فرم اجرا نشه ) و فقط مکان نما در richTextBox یک سطر به پایین بره ( حالت معمولی RichTextBox ) .

juza66
شنبه 28 خرداد 1390, 12:48 عصر
با سلام دوباره

ببنین من نمی خوام از خاصیت AcceptButton استفاده کنم ، مشکل من اینجاست موقعی که من توی RichTextBox کلید Enter رو می زنم پیغامی که توی رویداد KeyDown گفته بودم به فشردن enter نمایش بده رو نشون میده که من نمی خوام این کار رو بکنه ( یعنی اون پیغام رو نشون نده و رویداد KeyDown فرم اجرا نشه ) و فقط مکان نما در richTextBox یک سطر به پایین بره ( حالت معمولی RichTextBox ) .

دوست عزیز از روش شرطی استفاده کن!

میخوای وقتی روی RichTextBoxفوکوس کردی دستوراتی که درون KeyDown گذاشتی اجرا نشه؟!
از شرط استفاده کن!

اگه باز هم درست متوجه منظورت نشدم سورس رو بذار تا کمکت کنم :چشمک:

myazdan
شنبه 28 خرداد 1390, 13:16 عصر
من متوجه منظور شما نشدم بنابراین یک مثال براتون گذاشتم

juza66
شنبه 28 خرداد 1390, 17:07 عصر
من متوجه منظور شما نشدم بنابراین یک مثال براتون گذاشتم

دوست عزیز شما از تکس باکس داری استفاده میکنی نه RichTextBox !!

myazdan
شنبه 28 خرداد 1390, 17:43 عصر
دوست عزیز من از شما عذر خواهی می کنم
من توی برنامه ی خودم از RichTextBox استفاده کردم اما چون برنامه خودم خیلی بزرگ بود یک sample ساده ایجاد کردم که اشتباهی بجای RichTextbox از TextBox استفاده کردم اما از نظر سورس هیچ فرقی نداره . در ضمن من توی سورس برنامه توضیح دادم که در صورت فشردن کلید enter در KeyDown (یا KeyPress) چه اتفاقی بیفته . لطفا من رو راهنمایی کنین
با تشکر

juza66
شنبه 28 خرداد 1390, 18:28 عصر
دوست عزیز من از شما عذر خواهی می کنم
من توی برنامه ی خودم از RichTextBox استفاده کردم اما چون برنامه خودم خیلی بزرگ بود یک sample ساده ایجاد کردم که اشتباهی بجای RichTextbox از TextBox استفاده کردم اما از نظر سورس هیچ فرقی نداره . در ضمن من توی سورس برنامه توضیح دادم که در صورت فشردن کلید enter در KeyDown (یا KeyPress) چه اتفاقی بیفته . لطفا من رو راهنمایی کنین
با تشکر

دوست عزیز من بجای تکس باکس از ریچ تکس باکس استفاده کردم و اینتر هم زدم ولی تو برنامه پیغامی نشون نداد!!
یکبار خود از ریچ باکس استفاده کن وتایپ کن و اینتر هم فشار بده میبنی که پیغام اجرا نمیشه :چشمک:

alimanam
یک شنبه 29 خرداد 1390, 16:18 عصر
با سلام


دوست عزیز من بجای تکس باکس از ریچ تکس باکس استفاده کردم و اینتر هم زدم ولی تو برنامه پیغامی نشون نداد!!

به این دلیل چیزی نمایش داده نشد ! چون ویژگی KeyPreview فرم False بود ( البته پیغامی که در رخداد KeyDown تکس باکس بود نمایش داده میشد چون ربطی به خاصیت KeyPreview فرم نداشت ) و اما جواب :

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Enter AndAlso Not TextBox1.Focus Then MsgBox("Ok.")
If e.KeyCode = Keys.Escape Then Me.Close()

End Sub

موفق باشید./

myazdan
دوشنبه 30 خرداد 1390, 10:19 صبح
با سلام
من با روشی که شما گفتین امتحان کردم و جواب داد ، اما آیا هیچ راهی نداره که این عمل رو توی رویداد KeyDown یا KeyPress خود Textbox یا RichTextBox چک کنم و اگر کلید Enter رو فشار دادم دیگه کلید Enter رو به رویداد keyDown فرم نفرسته.
این کار رو برای مواقعی میخوام که TextBox داخل یک UserControl قرارداره و اون موقع دیگه نمیشه از توی فرم فوکوس بودن TextBox داخل UserControl رو چک کرد .

با تشکر

alimanam
دوشنبه 30 خرداد 1390, 11:39 صبح
با سلام


این کار رو برای مواقعی میخوام که TextBox داخل یک UserControl قرارداره و اون موقع دیگه نمیشه از توی فرم فوکوس بودن TextBox داخل UserControl رو چک کرد .

چه ربطی به فتح خرمشهر داره ! کنترل هرجا میخواد باشه چه به صورت دستی ( در Design Mode ) چه با کد نویسی چه درون یه User Control باشه به راحتی رخدادهاش در دسترس هست .

Public Class Form1

Private WithEvents myRichTxtBox As New System.Windows.Forms.RichTextBox
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Enter AndAlso Not Panel1.Controls(0).Focus Then MsgBox("Ok.")
If e.KeyCode = Keys.Escape Then Me.Close()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Panel1.Controls.Add(myRichTxtBox)
myRichTxtBox.Dock = DockStyle.Fill
End Sub

End Class


موفق باشید ./

roxe77
دوشنبه 30 خرداد 1390, 12:00 عصر
با یه متغییر سراسری و یه شرط کوچیک مشکلت حل میشه


Dim sel As Boolean = False

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If sel = False Then
If e.KeyCode = Keys.Enter Then MsgBox("Ok.")
If e.KeyCode = Keys.Escape Then Me.Close()
End If
End Sub

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If sel = False Then
If e.KeyCode = Keys.Enter Then MsgBox("Text.") ' در صورت درست بودن شرط دستوری که باعث بشه رویداد کیدون فرم اجرا نشه
End If
End Sub

Private Sub TextBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
sel = True
End Sub

Private Sub TextBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
sel = False
End Sub

alimanam
دوشنبه 30 خرداد 1390, 12:21 عصر
با یه متغییر سراسری و یه شرط کوچیک مشکلت حل میشه

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

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Enter AndAlso Not UserControl11.RichTextBox1.Focus Then MsgBox("Ok.")
End Sub

موفق باشید ./

myazdan
دوشنبه 30 خرداد 1390, 12:27 عصر
با سلام و تشکر از همه دوستان که من رو راهنمایی میکنن
من به شما گفتم که راهکاری که شما گفتید درست بود و اجرا شد اما آیا راهی برای روشی که من گفتم وجود داره یا نه؟

با تشکر

alimanam
دوشنبه 30 خرداد 1390, 12:55 عصر
من به شما گفتم که راهکاری که شما گفتید درست بود و اجرا شد اما آیا راهی برای روشی که من گفتم وجود داره یا نه؟

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

در کلاس اون به اصطلاح UserControl خودتون این کد رو بنویسین :

Public Class UserControl1

Private Sub RichTextBox1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.Enter
Me.ParentForm.KeyPreview = False
End Sub

Private Sub RichTextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.Leave
Me.ParentForm.KeyPreview = True
End Sub

End Class

موفق باشید ./

myazdan
دوشنبه 30 خرداد 1390, 15:03 عصر
ممنون از راهنماییتون