رویدادهای کیبورد

تاریخ انتشار:1394-02-25
تاریخ بروزرسانی: 1394-02-25
تعداد بازدید: 930



رویدادهای کیبورد

اگر بخواهید یکی از رویدادهای مربوط به فشرده شده دکمه های کیبورد را کنترل کنید باید رویدادهای KeyPress، KeyDown و KeyUp را کنترل کنید.
  • رویداد KeyDown زمانی اتفاق می افتد که یکی از دکمه های کیبورد به سمت پایین فشار داده شود.
  • رویداد KeyUp زمانی اتفاق می افتد که دکمه فشرده شده رها می شود.
  • رویداد KeyPress تلفیقی از دو رویداد بالا است.
به عنوان مثال یک رویداد KeyPress را به فرم اضافه می کنیم به طوریکه هر زمانی که یکی از دکمه های کیبورد فشرده شد مقدار آن با خاصیت Text کنترل Lable اضافه شود. یک برنامه ویندوزی جدید ایجاد کنید و نام آن را KeyBoardEvents بگذارید.سپس یک کنترل Label به آن اضافه نمایید. خاصیت Text کنترل Lable را پاک کنید. بر روی کنترل form کلیک کرده و از پنجره Properties رویداد KeyPress را یافته و بر روی آن دو بار کلیک کنید تا یک کنترل کننده رویداد ایجاد شود. در داخل کنترل کننده رویداد Form1_KeyPress کد زیر را وارد کنید:
   ۱: using System;                                                                                                                  
   ۲: using System.Windows.Forms;                                                                                                    
   ۳:                                                                                                                                                           
   ۴: namespace KeyBoardEvents                                                                                                       
   ۵: {                                                                                                                                                         
   ۶:     public partial class Form1 : Form                                    
   ۷:     {                                                                                                                                                     
   ۸:         //Variable to count letters for simple word wrap                                                                      
   ۹:         private int charCount = 0;                                                                                             
  ۱۰:                                                                                                                                                           
  ۱۱:         public Form1()                                                                                                         
  ۱۲:         {                                                                                                                                                 
  ۱۳:             InitializeComponent();                                                                                                                        
  ۱۴:         }                                                                                                                                                 
  ۱۵:                                                                                                                                                           
  ۱۶:         private void Form1_KeyPress(object sender, KeyPressEventArgs e)  
  ۱۷:         {                                                                                                                                                 
  ۱۸:             charCount++;                                                                                                                                  
  ۱۹:                                                                                                                                                           
  ۲۰:             //Go to next line after the line's 30th character                                                                 
  ۲۱:             if (charCount > 30)                                                                                                
  ۲۲:             {                                                                                                                                             
  ۲۳:                 label1.Text += "rn";                                                                                                                    
  ۲۴:                 charCount = 0;                                                                                                                            
  ۲۵:             }                                                                                                                                             
  ۲۶:             else                                                                                                               
  ۲۷:             {                                                                                                                                             
  ۲۸:                 //Append the pressed keyboard key to the label using KeyChar property                                         
  ۲۹:                 label1.Text += e.KeyChar;                                                                                                                 
  ۳۰:             }                                                                                                                                             
  ۳۱:         }                                                                                                                                                 
  ۳۲:     }                                                                                                                                                     
  ۳۳: }
رویداد KeyPress هر وقت که یکی از دکمه های کیبورد فشرده شود اتفاق می افتد. در خط ۱۳ یک متغیر به نام charCount تعریف و مقدار دهی اولیه شده است و از آن برای تشخیص تعداد کاراکترهای خط جاری و رفتن به خط بعد استفاده می شود. کنترل کننده رویداد تعداد کاراکترهای تایپ شده را به وسیله افزایش افزایش یک واحدی charCount در خط ۱۷ تشخیص می دهد. در خط ۲۱ تست می شود که آیا مقدار charCount از ۳۰ بیشتر است یا نه؟ اگر بیشتر بود، یک خط جدید با استفاده از دستور “rn” ایجاد و بقیه کاراکترها تایپ شده در آن نمایش داده می شوند. سپس در خط ۲۳ بار دیگر مقدار charCount را به دلیل اینکه در ابتدای یک خط جدید هستیم، صفر می کنیم . اگر مقدار charCount کوچکتر یا مساوی ۳۰ باشد، به سادگی کاراکتر تایپ شده توسط کاربر با استفاده از خاصیت KeyPressEventArgs.KeyChar به متن اضافه می شود. حال برنامه را اجرا کنید. مشاهده می کنید که با زدن هر دکمه کیبورد، متن کنترل lable تغییر کرده و کاراکترهایی را که شما وارد می کنید به آن اضافه می شود. وقتی که رویدادهای KeyDown و KeyUp را کنترل می کنید، می توانید از آرگومان KeyEventArgs که شامل خاصیت های زیادی درباره دکمه فشرده شده است استفاده نمایید. خواص این آرگومان به شرح زیر است :
خاصیت توضیح
Alt تشخیص می دهد که آیا دکمه Alt فشرده شده است یا نه؟
Control تشخیص می دهد که آیا دکمه Control فشرده شده است یا نه؟
KeyCode کد اسکی دکمه فشرده شده را می گیرد. و با استفاده از آن تشخیص می دهد که دکمه خاصی فشرده شده است یا نه؟
KeyData بسیار شبیه به خاصیت KeyCode است با این تفاوت که فشرده شدن دکمه های ترکیبی را نیز تشخیص می دهد.
KeyValue مقدار عددی دکمه فشرده شده را بر می گرداند.
Modifier تشخیص می دهد که کدام دکمه های ترکیبی (SHIFT, CTRL, ALT) فشرده شده اند؟
Shift می گوید که آیا دکمه Shift فشرده شده است یا نه؟
SuppressKeyPress به شما اجازه می دهد که از ورود اطلاعات از طریق کیبورد توسط کاربر جلوگیری کنید.
به عنوان مثال در کد زیر از خاصیت SupressKeyPress استفاده شده است که در آن فقط اجازه ورود اعداد به کاربر داده شده است (کاربر نمی تواند هیچ کاراکتر و یا یا نشانه ای را وارد کند). یک کنترل text box را به فرمتان اضافه کرده و یک کنترل کننده رویداد را به رویداد KeyDown اضافه نمایید.
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (!(e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 && !e.Shift))
    {
        e.SuppressKeyPress = true;
    }
}
شرط داخل دستور if می گوید که اگر دکمه تایپ شده توسط کاربر یک دکمه غیر عددی بود یا کلید shift فشرده شد، توسط خاصیت SuppressKeyPress نادیده گرفته شود. خاصیت KeyCode که از آن در شرط استفاده کرده ایم شامل مقادیری از نوع شمارشی Keys است. دکمه های عددی به وسیله مقایر D0 تا D9 نمایش داده شده اند. در ضمن لازم است که چک کنیم که آیا دکمه Shift فشرده شده است یا نه؟ از آنجاییکه نتیجه فشردن دکمه Shift همرا با یک عدد ممکن است منجر به تولید یک علامت مثلا @ (ترکیب دکمه Shift و عدد ۲ ) شود بنابراین باید از خاصیت Shift کلاس KeyEventArgs استفاده کنیم.
پیوستی برای این مطلب وجود ندارد
درباره نویسنده

من مهندس شامحمدی هستم و در یک کلام سرم درد میکنه واسه کد نویسی سعی میکنم کنار کارم، تجربیاتم را هم اینجا بزار واسه دوستان

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

این گروه صرفا برای بحث در باره کد ها و نرم افزارهای هسته ای می باشد لذا از بحث های نامرتبط خود داری فرمایید و با معرفی گروه به دوستان خود در مفید بودن بیشتر گروه همیار ما باشید.


کانال تلگرامی ویژه اطلاع رسانی کارگاه های آموزشی

در این کانال اطلاعیه های مربوط به کارگاه های آموزشی و دوره های آنلاین و حضوری منتشر می شود


گروه تلگرامی پشتیبانی کارگاه ها و کلاس ها

در این کانال آخرین اخبار منتشر شده در سایت نشر داده می شود


گروه تلگرامی آخرین آموزش های منتشر شده در سایت

در این کانال آخرین اخبار منتشر شده در سایت نشر داده می شود


کانال آپارت ما

این کانال متعلق به وب سایت مهندس شامحمدی می باشد. تنها قسمتی از ویدئو های آموزشی در اینجا نشان داده است.


کانال نماشا ما

این کانال متعلق به وب سایت مهندس شامحمدی می باشد. تنها قسمتی از ویدئو های آموزشی در اینجا نشان داده است.