گاهی ممکن است به هر دلیلی نیاز داشته باشیم تا بدانیم که کاربر، کدام دکمهی کیبورد را فشار میدهد. انجام چنین کاری در سیشارپ ساده است. به کمک رویدادهای KeyDown، KeyPress و KeyUp، میتوان بررسی کرد که کاربر چه تعاملی با صفحه کلید (کیبورد) خود داشته و کدام یک از دکمهها را فشار میدهد. بهعبارتی، میخواهیم رویدادهای کیبورد را تشخیص دهیم.
مراحل کار
فرم خود را انتخاب کرده و از قسمت Properties، به بخش رویدادها بروید. سپس میتوانید سه رویداد KeyDown، KeyPress و KeyUp را مشاهده کنید. این رویدادها فقط مختص فرم نبوده و در کنترلهای دیگری نیز وجود دارند. ولی ما در اینجا قصد داریم تا فرم، کنترل رویدادهای کیبورد را بهعهده بگیرد. ابتدا سه رویداد بالا رو توضیح میدهیم:
- KeyDown: زمانی که یک دکمه، به سمت پایین فشار داده میشود؛ این رویداد اجرا شده و تا زمانی که دکمه رها نشود، دوباره و دوباره اجرا خواهد شد.
- KeyUp: زمانی که کاربر، فشرده شدن یک دکمه را رها کرده و کلید به سمت بالا میآید.
- KeyPress: دقیقا همانند KeyDown است؛ اما فقط برای کلیدهایی که شامل کاراکتری میباشند؛ مثلا حروف، اعداد و …! این رویداد با کلیدهای ctrl, alt, shift و موارد این چنینی اجرا نمیشود.
یک Label به فرم اضافه کنید. سپس رویداد KeyDown فرم را پیادهسازی نمایید. در بدنهی این رویداد، متنی را به لیبل خود اضافه کنید:
1 2 3 4 |
private void Form1_KeyDown(object sender, KeyEventArgs e) { label1.Text += " FuLLKade"; } |
حال برنامه را اجرا کرده و با انگشت مبارک خود، یک دکمه را فشار دهید؛ اما رها نکنید. بله؛ اتفاقی که خواهد افتاد این است که متن FuLLKade، مدام در حال اضافه شدن به لیبل است. بنابراین رویداد KeyDown، فقط یک بار اجرا نمیشود! تا زمانی که کاربر انگشت مبارک خود را از روی دکمه برندارد، این رویداد بهطور مکرر پشت سرهم اجرا خواهد شد.
اکنون کد داخل این رویداد را پاک کنید. سپس بیایید رویداد KeyUp را پیاده کرده و کد بالا را درون آن قرار دهیم؛ تا ببینیم چه اتفاقی رخ میدهد:
1 2 3 4 |
private void Form1_KeyPress(object sender, KeyPressEventArgs e) { label1.Text += "FuLLKade"; } |
برنامه را اجرا کرده و همانند بالا، با انگشت مبارک خود، دکمهای را فشار دهید. ممکن است اتفاقی همانند رویداد KeyDown رخ دهد؛ اما در عین حال نیز ممکن است هیچ اتفاقی نیفتد! این بستگی به این دارد که کدام دکمه را فشار داده باشید. اگر کلید شامل یک حرف یا عدد و بهعبارتی یک کاراکتر نوشتاری باشد، این رویداد اجرا میشود. اما در مورد کلیدهای دیگر، اجرا نخواهد شد.
حالا، نوبت پیادهسازی رویداد KeyUp است. این رویداد، تنها یک بار اجرا خواهد شد. بیایید کد بالا را درون این رویداد بنویسیم:
1 2 3 4 |
private void Form1_KeyUp(object sender, KeyEventArgs e) { label1.Text += "FuLLKade"; } |
پس انتظار میرود که با فشردن و رها کردن یکی از دکمهها، این رویداد فقط یک بار اجرا شود.
پارامترهای رویدادها
این رویدادها، پارامترهایی دارند که در ادامه هرکدام را توضیح میدهیم.
- پارامتر sender:
آبجکت چیزی است که این رویداد را فعال کرده و در اینجا همان خود فرم میباشد و میتوانید آن را به خود فرم تبدیل کنید. - پارامتر KeyEventArgs:
شامل اطلاعات کلید فشرده شده است. - پارامتر KeyPressEventArgs:
شامل اطلاعات کلید فشرده شده است. با این تفاوت که برای رویداد KeyPress بوده و اطلاعات کاراکتر مربوط به کلید را نیز در اختیار دارد.
مثال برای KeyEventArgs:
– فرض کنید یک بازی قرار است بسازید که با نگهداشتن کلید W، کاراکتر به سمت جلو حرکت کند:
1 2 3 4 5 6 7 |
private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.W) { // کد حرکت کاراکتر } } |
این کد در KeyUp نیز به همین صورت است.
مثال برای KeyPressEventArgs:
– در اینجا برخلاف بالا، چیزی بهنام ویژگی KeyCode وجود نداشته و میتوان از ویژگی KeyChar که از نوع char استفاده نمود که شامل حرف مرتبط با کلید فشرده شده میشود:
1 2 3 4 5 6 7 |
private void Form1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 'w') { // کدهایی که اگر حرفم مورد نظر فشرده شد اجرا می شوند } } |
اما یک تفاوت اینجا وجود دارد. اگر حالت Caps Lock کیبورد را فعال کنید، این شرط اجرا نخواهد شد! چرا که در این حالت، اگر کلید مورد نظر را فشار دهید، حرف بزرگ آن اجرا شده و ما در شرط بالا، تنها حرف کوچک را بررسی کردیم. بنابراین، در اینجا ما با کاراکترها کار داریم، نه با کد اسکی هر کلید؛ چراکه یک کلید میتواند کد اسکی یکسانی داشته باشد، اما توان تولید کردن کاراکترهای مختلفی را دارد.
مطالب مرتبط
کلیدهای ترکیبی و ساخت کلید میانبور
شبیه سازی کیبورد و ماوس با کتابخانه فول کده
نظرات ثبت شده بدون دیدگاه