رویدادهای کیبورد
اگر بخواهید یکی از رویدادهای مربوط به فشرده شده دکمههای کیبورد را کنترل کنید باید رویدادهای KeyPress ،KeyDown و KeyUp را کنترل کنید.
به عنوان مثال یک رویداد KeyPress را به فرم اضافه میکنیم به طوریکه هر زمانی که یکی از دکمههای کیبورد فشرده شد مقدار آن با خاصیت Text کنترل Lable اضافه شود. یک برنامه ویندوزی جدید ایجاد کنید و نام آن را KeyBoardEvents بگذارید. سپس یک کنترل Label به آن اضافه نمایید.
خاصیت Text کنترل Lable را پاک کنید. بر روی کنترل form کلیک کرده و از پنجره Properties رویداد KeyPress را یافته و بر روی آن دو بار کلیک کنید تا یک کنترل کننده رویداد ایجاد شود. در داخل کنترل کننده رویداد Form1_KeyPress کد زیر را وارد کنید:
1: using System; 2: using System.Windows.Forms; 3: 4: namespace KeyBoardEvents 5: { 6: public partial class Form1 : Form 7: { 8: //Variable to count letters for simple word wrap 9: private int charCount = 0; 10: 11: public Form1() 12: { 13: InitializeComponent(); 14: } 15: 16: private void Form1_KeyPress(object sender, KeyPressEventArgs e) 17: { 18: charCount++; 19: 20: //Go to next line after the line's 30th character 21: if (charCount > 30) 22: { 23: label1.Text += "rn"; 24: charCount = 0; 25: } 26: else 27: { 28: //Append the pressed keyboard key to the label using KeyChar property 29: label1.Text += e.KeyChar; 30: } 31: } 32: } 33: }
رویداد KeyPress هر وقت که یکی از دکمههای کیبورد فشرده شود اتفاق می افتد. در خط 9 یک متغیر به نام charCount تعریف و مقدار دهی اولیه شده است و از آن برای تشخیص تعداد کاراکترهای خط جاری و رفتن به خط بعد استفاده میشود. کنترل کننده رویداد تعداد کاراکترهای تایپ شده را به وسیله افزایش یک واحدی charCount در خط 18 تشخیص میدهد. در خط 21 تست میشود که آیا مقدار charCount از 30 بیشتر است یا نه؟ اگر بیشتر بود، یک خط جدید با استفاده از دستور “rn” ایجاد و بقیه کاراکترها تایپ شده در آن نمایش داده میشوند. سپس در خط 23 بار دیگر مقدار charCount را به دلیل اینکه در ابتدای یک خط جدید هستیم، صفر میکنیم. اگر مقدار charCount کوچکتر یا مساوی 30 باشد، به سادگی کاراکتر تایپ شده توسط کاربر با استفاده از خاصیت 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 و عدد 2) شود بنابراین باید از خاصیت Shift کلاس KeyEventArgs استفاده کنیم.
سلام در کد آخر اون علامت کوچکتر مساوی و بزرگتر مساوی چه معنایی میده ؟
(>=) و (<=)
سلام
هر دکمه یا هر کاراکتر دارای یک کد اسکی ه…
مثلا کد اسکی اعداد 0 تا 9 از 48 شروع میشه تا 57
تو کد مذکور گفتیم هر کدی غیر از این کدها یا بهتر بگیم هر کارکتری بجز این کاراکتر ها رو کاربر فشار داد، اجازه تایپ رو نده
سلام وققتون بخیر
ببخشید چجوری میشه همزمان از دو جهت برا حرکت دادن شی استفاده کرد؟
مثلا بالا و چپ و یا بالا و راست و همچنین پایین و چپ و پایین و راست استفاده بشه
ولی از دو جهت مخالف هم استفاده نشه مثل بالا و پایین و چپ و راست
سلام، 13 کد اسکی دکمه Enter ه، شما باید یه کم در مورد کد اسکی تو اینترنت سرچ کنید. حرف e رو هم تو مبحث کنترل کننده رویداد بخونید. در کل این خط به این معناست که اگر بر روی دکمه Enter کلیک شد … فلان کار رو انجام بده
سلام خسته نباشید. فقط یه مشکل دارم کد دستور زیر میتونی برام توضیح بده
if (e.keyvalue==13)
e یعنی چه؟
keyvalue چی هست؟
عدد 13 برای چی؟؟
سلام
من می خواهم از یه حلقه مثلا for تعداد مشخصی افراد مثلا ۱۰ را از تکس باکس اول گرفته و یکی یکی مشخصات همدم را گرفته و در یک جدول قرار داده و بعد از اتمام با یکی از مشخصات منحصر به فرد مثل کد ملی و یا مد پستی قابل جستجو باشن لطفا راهنمایی بفرمایید
سلام، ممنون میشم سوالاتتونو تو بخش پرسش و پاسخ سایت مطرح بفریمایید
سلام ، وقت بخیر ببخشید من به کمک نیاز دارم لطفا کمکم کنین ، من میخوام که کاربر نتونه از برنامه خارج بشه و یک دکمه ی مخفی کردن برنامه توی برنامم قرار دادم ، الان از این کد استفاده کردم
ولی کاربر میتونه با زدن کنترل و اف چهار از برنامه خارج بشه ، بیزحمت بگین باید چیکار کنم که این دو تا کلید غیر فعال بشن
سلام دوست عزیز، تو سایت هست، لینک های زیر رو ببینید
لینک 1
لینک 2
سلام.خسته نباشید.آموزش هاتون فوق العاده هستن
فقط بی زحمت HScrollBar و VScrollBar رو هم آموزش بدید.به شدت به این ها نیاز دارم اما هیچ جا آموزشی پیدا نکردم
با تشکر فراوان از زحماتتون
سلام ، مرسی دوسته .
باشه حتما یک آموزش از این کنترل ها تهیه می کنیم.