PDA

View Full Version : سوال درباره تشخیص کلیدی خاص در رویداد KeyDown



SajjadKhati
چهارشنبه 04 فروردین 1395, 09:52 صبح
سلام
این کلاس keys در رویدادهای کیبرد دقیقا چیه؟ من کد زیر رو وقتی در رویداد KeyDown (فرم) مینویسم ، هر دکمه ای رو میزنم بهم پیام E رو میده. چرا؟ :



string y = Convert.ToString(Keys.E);
MessageBox.Show(y);

مگه نباید فقط وقتی دکمه E را میزنم فقط عمل کنه؟
و اینکه من در کد زیر که توی رویداد KeyDown گذاشتم ، میخوام وقتی کلیدهای ترکیبی Ctrl+E رو زدم ، بهم پیام بده ولی نمیده . علت اشتباهم کجاست؟ :



private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control==true && e.KeyData==Keys.E)
{
MessageBox.Show(e.Control.ToString()+" + "+e.KeyData.ToString()+" pressed");
}


}

iman_me
چهارشنبه 04 فروردین 1395, 10:26 صبح
سوال اول
خوب شما داری E رو توی یه استرینگ میریزی بعد نشونش میدی پس میخوای چی بهت نشون بده
سوال دو
اول keypreveiw رو true کن بعد

if ((e.Control == true) && (e.KeyCode == Keys.E))
{
MessageBox.Show("");
}

SajjadKhati
چهارشنبه 04 فروردین 1395, 11:17 صبح
سوال اول
خوب شما داری E رو توی یه استرینگ میریزی بعد نشونش میدی پس میخوای چی بهت نشون بده
سوال دو
اول keypreveiw رو true کن بعد

if ((e.Control == true) && (e.KeyCode == Keys.E))
{
MessageBox.Show("");
}



ممنون آقا ایمان
اولی را والا متوجه نشدم . مثلا وقتی هر دکمه ای را میزنم بجز E رو باید بنویسه None یا چیزی شبیه این و فقط E رو میزنم باید بنویسه E دیگه؟! پس چرا هر دکمه ای رو تو کد اول میزنم مینویسه E ؟
دومی هم keyPreview فعاله و با این کد هم که دادی بازم کار نمیکنه برام! نمیدونم مشکل از کجاست . مثلا این کد برام کار میکنه :



string x=Convert.ToString(e.KeyData);
if (x=="A")
{
MessageBox.Show(x);
}


ولی کد دومی که خودم دادم یا کدی که دادی کار نمیکنه

iman_me
چهارشنبه 04 فروردین 1395, 12:06 عصر
واسه سوال اول
شما شرطی نزاشتی ک در چ صورت E رو پیغام بده
فقط نوشتی پیغام بده بعد گزاشتیش توی key down
واسه دومی هم
کدی ک گذاشتم رو کجا قرار دادی

SajjadKhati
چهارشنبه 04 فروردین 1395, 12:14 عصر
واسه سوال اول
شما شرطی نزاشتی ک در چ صورت E رو پیغام بده
فقط نوشتی پیغام بده بعد گزاشتیش توی key down
واسه دومی هم
کدی ک گذاشتم رو کجا قرار دادی

خوب شرط هم بزارم فرقی نمیکنه چون هر دکمه ای رو که فشار بدم E رو برمیگردونه و کد شرط رو اجرا میکنه .
دومی هم توی رویداد KeyDown فرم گزاشتم (کد کاملش توی پست اول هست)

SajjadKhati
پنج شنبه 05 فروردین 1395, 14:47 عصر
هر کدوم جداگانه جواب میدن ولی با هم که بشن (اند وسط شون قرار بگیره) شرط دیگه اجرا نمیشه
چرا؟

SajjadKhati
جمعه 06 فروردین 1395, 05:49 صبح
کسی نمیدونه؟

vb8334
جمعه 06 فروردین 1395, 07:07 صبح
سلام دوست عزیز

این کد رو تست کن.




if(e.Modifiers == Keys.Control && e.KeyCode == Keys.E)
{
MessageBox.Show("fire");
}

SajjadKhati
جمعه 06 فروردین 1395, 10:19 صبح
سلام دوست عزیز

این کد رو تست کن.




if(e.Modifiers == Keys.Control && e.KeyCode == Keys.E)
{
MessageBox.Show("fire");
}




سلام
ممنون این کد عمل کرد
ولی اشکال کد من کجا بود مگه؟

vb8334
جمعه 06 فروردین 1395, 11:08 صبح
سلام
ممنون این کد عمل کرد
ولی اشکال کد من کجا بود مگه؟


کد آقا ایمان هم کار میکنه

اما اگه تفاوتش رو بخوایم بدونیم

هر دو modifiers و Control از کلاس KeyEventArgs
Modifiers : میاد میبینه چه کلید های ترکیبی فشرده شده مثلآ (alt,shift,ctrl)

Control : فقط میاد میگه که آیا کلید ctrl فشرده شده یا نه .

مثلآ یه کاری که با modifiers ها نمیشه انجام داد این مقایسه هست.



if(e.KeyCode == Keys.E && (e.Alt || e.Control || e.Shift))
{
}

SajjadKhati
جمعه 06 فروردین 1395, 11:35 صبح
کد آقا ایمان هم کار میکنه

اما اگه تفاوتش رو بخوایم بدونیم

هر دو modifiers و Control از کلاس KeyEventArgs
Modifiers : میاد میبینه چه کلید های ترکیبی فشرده شده مثلآ (alt,shift,ctrl)

Control : فقط میاد میگه که آیا کلید ctrl فشرده شده یا نه .

مثلآ یه کاری که با modifiers ها نمیشه انجام داد این مقایسه هست.



if(e.KeyCode == Keys.E && (e.Alt || e.Control || e.Shift))
{
}





ممنون
مشکل انگار فقط از e.KeyData ای که من گذاشتم هست که با e.KeyCode شما حل شد
ولی چرا؟ فرق این دو عبارت چی هستن که تفاوت عملکردشون این میشه؟
البته با modifiers که توضیح دادین . اگه اشتباه نکنم modifier رو گفتین برای زمانی کاربرد داره که کلیدهای ترکیبی مثل همین بخوایم بنویسیم . خوب اگه چند کلید ترکیبی مثلا ctrl+shift+space+H بخوایم بنویسیم اون موقع باز هم کافیه که برای 2 کلید ctrl و shift اش از modifier ها استفاده کنیم و برای بقیه از حالت عادی؟

vb8334
جمعه 06 فروردین 1395, 13:35 عصر
keydata و keycode شباهت زیادی با هم دارند



keydata : فشرده شدن کلیدهای ترکیبی رو هم تشخیص میده

keycode : کد اسکی دکمه فشرده رو میگیره و بررسی میکنه که چه کلیدی فشره شده


یه مثال از نحوه استفاده از keydata



if (e.KeyData == (Keys.E | Keys.Control))
{


MessageBox.Show("asdas");
}