آژانس هواپیمایی

مشکل با رویداد KeyDown

شروع موضوع توسط hamid_80386 ‏25 سپتامبر 2007 در انجمن Visual Basic 6

  1. hamid_80386

    hamid_80386 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    46
    تشکر شده:
    0
    بازم سلام

    کد زیر رو یه نگاه بندازید:
    کد:
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = 2 And KeyCode = vbKeyReturn Then MsgBox "Hamid3"
    
    
    End Sub

    من تو برنامه یه TextBox هم دارم که وقتی رویداد KeyDown فرم اجرا میشه فوکوس روی اون TextBox هست، و نمیخوام هم از اون خارج بشه،

    وقتی کلیدCtrl+ Enter زده میشه، رویداد KeyDown فرم اجرا میشه و پیغام Hamid3 چاپ میشه.

    تا اینجاش درست، اما مشکل اینه که بعد از چاپ Hamid3 کلید Enter برای TextBox هم عمل میکنه و متن به یک سطر بعد میره، من میخوام این اتفاق نیفته،

    البته با برنامه نویسی میشه پروسیجری نوشت تا این اتفاق رو Back کنه، ولی مشکل اینه که من تو فرم TextBox زیاد دارم و باید شروط زیادی برای این کار بذارم،

    ولی همش بنظرم یه کار اصولی تر وجود داره.... ؟؟؟؟
     
  2. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    من اينكارو كردم درست شد ببين بدردت مي خوره (روش مناسبي نيست اما جواب ميده)
    کد:
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = 2 And KeyCode = vbKeyReturn Then
    MsgBox "Hamid3"
    VBA.SendKeys "{backspace}"
    End If
    End Sub
    
    
     
  3. hamid_80386

    hamid_80386 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    46
    تشکر شده:
    0
    از توجه تون خیلی ممنون، بله خودم هم یه همچین چیزی تو نظرم بود، منتها شما خیلی ساده تر از اون چیزی که من تو نظرم بود عمل کردی، که کارم راحت تر شد، خیلی ممنون.

    ولی میخواستم ببینم یعنی ویژوال بیسیک به این گله گندگی یه راه حل اصولی برای حل این مشکل نداره؟
     
  4. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    واسه رويداد Keypress هست ولي واسه Keydown خير. واسه Keypress مقدار keyascii رو كه صفر كني خودش كليد رو كنسل ميك نه.
     
  5. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,355
    تشکر شده:
    1,337
    محل سکونت:
    یه خورده اونورتر
    خب این منطقیه چون فکوس روی textboxه اینتر میخوره. مگر اینکه قبلش disableش کنی یا فکوس رو از روش ورداری.
     
  6. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    يه كار ديگه بكن ببين اونطوري هم كار مي كنه؟ تو رويداد keypress چك كن اگه كليد enter (كد 13) فشرده شد بعد keyascii رو صفر كن. شايد اينم جواب بده.
     
  7. خرید بیت کوین3eo
  8. hamid_80386

    hamid_80386 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    46
    تشکر شده:
    0
    خاصیت KeyPreview فرم روشنه، یعنی موقعی که یه کلید زده میشه اول رویداد KeyPress فرم انجام میشه، دیگه بعد از اون هم که Disable کردن TextBox بدرد نمیخوره.

    اگه تو خود رویداد KeyPress فرم هم TextBox رو Disable کنیم که باز باید تو همون رویداد هم Enableش کنیم.
     
  9. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,355
    تشکر شده:
    1,337
    محل سکونت:
    یه خورده اونورتر
    مشکل شما بیشتر منطقیه تا کد نویسی :D خودتون رو بذارید جای ویبی. اگر فکوس روی تکست باکس باشه مسلما هر کاراکتری فشرده بشه چه حالا KeyPreview روشن باشه یا نه، به تکست باکس فرستاده میشه. فکر میکنم تنها راه Hook کردن کیبرده، و در اون حالتم باز ویبی کار خودش رو میکنه مگر اینکه توی هوک تمام کنترل کیبورد رو در دست بگیرید!
    /
    اصلا این برنامه برای چی هست؟ نمیشه label استفاده کرد؟
     
  10. hamid_80386

    hamid_80386 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    46
    تشکر شده:
    0
    یه پروژه ساده ست، ولی نه نمیشه از Label استفاده کرد،

    آخه درسته منطقی هست، ولی خب این یه معضل هم هست، وی بی میتونست این مساله رو هم در نظر بگیره، مثلا مثل خاصیت KeyPreview که واسه فرم گذاشته، یه خاصیت اینطوری هم واسه کنترل هیی مثل TextBox میذاشت با یه مقدار True , False که مثلا اگه کلید فشرده شده، در رویداد KeyPress فرم و یا حتی خود اون کنترل وجود داشت، دیگه اون کاراکتر روی کنترل عمل نکنه.

    بعدم من الان فقط روی Ctrl + Enter , Ctrl+ Space مشکل دارم، ولی مثلا وقتی Ctrl + S رو میزنم مشکلی پیش نمیآد:(
     
  11. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,355
    تشکر شده:
    1,337
    محل سکونت:
    یه خورده اونورتر
    خوب تکست باکسو برای همین ساختن دیگه :D برای ورود اطلاعات... حالا اگر بخواین همچین قابلیتی رو بسازی باید خودت یه ActiveX بسازی که کار textbox رو انجام بده و قبلش eventی بسازی که کنترل کنه و امکان رد کاراکتر رو بده. بازم پیشنهاد میکنم یا از لیبل استفاده کنی یا روش برنامه رو تغییر بدی. راحتترین کار همینه. وگرنه باید کیبرد رو هوک کنی... http://www.vbaccelerator.com/home/Vb/Code/Libraries/Hooks/vbAccelerator_Hook_Library/article.asp
     
  12. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    روشش رو فهميدم. برو حال كن :
    کد:
    Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = 10 Then
    KeyAscii = 0
    End If
    End Sub
    
     
  13. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    اينم برنامه كامل كه هردو رو برات درست ميكنه يعني وقتي اون دوتا دكمه زده شد چيزي نوشته نميشه.
    يه فرم بساز و اين كد رو تو بخش كدش كپي كن.
    کد:
    Dim IsCTSpace As Boolean
    Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = 10 Or IsCTSpace = True Then
    KeyAscii = 0
    End If
    IsCTSpace = False
    End Sub
    
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = 2 And KeyCode = vbKeyReturn Then
    Me.Caption = "Ctrl + Enter"
    End If
    If Shift = 2 And KeyCode = vbKeySpace Then
    IsCTSpace = True
    Me.Caption = "Ctrl + Space"
    End If
    End Sub
    
    
     
  14. hamid_80386

    hamid_80386 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    46
    تشکر شده:
    0
    دستت درد نکنه ، خیلی ممنون

    شیوه باحالیه
     
  15. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    فقط يه مشكل داره تو بخشي كه كد رو چك مي كنه نبايد از msgbox و يا هرچي كه focus رو از textbox ميگيره استفاده كني.
     
avanak عسل طبیعی و گرده گل ایرانی