PDA

View Full Version : انتظار برای یک رخداد



m.h.movahedi
یک شنبه 24 خرداد 1394, 11:27 صبح
سلام
در یک برنامه من باید با کد رخداد keypress رو ایجاد کنم سپس کارکتر رو دریافت کنم و این روند باید چندین بار تکرار بشه. وقتی که کدهای تولید رخداد رو پشت سر هم قرار میدم، چیزی ذخیره نمی شه (کارکترها) و برای همین می خوام بعد از ایجاد رخداد صبر کنم تا کدهای داخل رخداد انجام بشند و سپس رخداد بعدی رو ایجاد کنم. چطور می تونم این کار رو انجام بدم.

Mahmoud.Afrad
یک شنبه 24 خرداد 1394, 16:03 عصر
شما نمیتونید رخداد رو ایجاد کنید مگر اینکه شرایط ایجادش مهیا و عاملش هم وجود داشته باشه. در این رخداد عامل ایجاد فشردن کلید کیبورد هست.
بهتره هدفت رو بیان کنی تا به راه حل منطقی برسی.

m.h.movahedi
یک شنبه 24 خرداد 1394, 17:13 عصر
سلام
شدنی که هست، به عنوان مثال کد زیر رخداد ایجاد فشردن کلید a رو اصطلاحاً fire می کنه

System.Windows.Forms.SendKeys.Send("a");
البته راههای دیگه ای هم هست که هر کدوم مزایای خودشون رو دارند. این ساده ترینشونه
در مورد برنامه بخوام بنویسم زیاد می شه . با این کدها می خوام کارکترهای هر زبان رو پیدا کنم ( در یونیکد دسته بندی بر حسب زبان نبود یا من پیدا نکردم ) برای همین از این روش استفاده می کنم. برای تمام کلیدها رخداد ایجاد می شه و کارکتر خروجی ذخیره میشه.

Mahmoud.Afrad
یک شنبه 24 خرداد 1394, 18:13 عصر
خوب این کد هم یک عامل برای raise شدن رویداد حساب میشه. من فکر کردم میخوای متد رویدادگردان رو دستی فراخوانی کنی که کار درستی نیست.
حالا کد رویداد Keypress رو بزار.

m.h.movahedi
دوشنبه 25 خرداد 1394, 09:32 صبح
به عنوان مثال فرض کنید در تابع داریم:

System.Windows.Forms.SendKeys.Send("a");
System.Windows.Forms.SendKeys.Send("b");


و در رخداد keypress

MessageBox.Show(e.KeyChar);
خوب حالا فقط پیغام a داده میشه.
برای دادن پیغام b باید اجرای کد رو بعد از

System.Windows.Forms.SendKeys.Send("a");
منتظر نگه داشت

Mahmoud.Afrad
دوشنبه 25 خرداد 1394, 19:27 عصر
متد show مسیج باکس باعث میشه تا بقیه کد معطل بمونه تا مسیج باکس بسته بشه. اگر e.KeyChar رو به کنترلی مثل لیست باکس اضافه کنی هر دو کاراکتر اضافه میشن.

m.h.movahedi
سه شنبه 26 خرداد 1394, 09:51 صبح
سلام
messagebox در اینجا برای نمونه بود و بدون اون هم مشکل داشتم. البته شاید مشکل از کد من هم بوده. به هر حال مشکل رو حل کردم. کل فرایند رو به صورت مسئله تولید کننده و مصرف کننده در آوردم و از تردها استفاده کردم. حالا حتی با messagebox هم کار می کنه.