PDA

View Full Version : استفاده از کلید های F1,F2,...



mohammad.es24
شنبه 01 بهمن 1390, 15:14 عصر
سلام به همه دوستان خوبم
من میخوام وقتی یک فرمی باز هستش زمانی که کاربر به عنوان مثال کلید F1 روی کیبورد رو میزنه حالا یک سری کار انجام بده.ولی من داخل event KeyDown فرم این کار رو کردم ولی هیچ کاری انجام نمیده .میخواستم کمکم کنید که چطوری از کلید های F کیبورد استفاده کنم.ممنون

m2_farzan
شنبه 01 بهمن 1390, 15:44 عصر
از چه نسخه ای از دات نت استفاده می کنید؟

من با دات نت 3.5 آزمایش کردم، رویداد KeyDown عمل می کنه.

برای مثال اگه داخل KeyDown فرمتون این کد رو بنویسید و F1 را فشار دهید، یک پیام حاوی عبارت F1 نمایش داده می شود.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show(e.KeyCode.ToString());
}

mohammad.es24
شنبه 01 بهمن 1390, 16:14 عصر
منم از 3.5 استفاده میکنم ولی حتا بریک پوینت هم که میزارم اصلا انگار نه انگار اصلا وارد KeyDown نمیشه.من دقیقا این کار رو کردم

privatevoid frmBarChartMonth_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F5)
{
btnViewChart_Click(sender, e);
}
}

m2_farzan
شنبه 01 بهمن 1390, 16:28 عصر
مطمئنید که رویداد رو به فرمتون وصل کردید؟

روی فرم کلیک کنید و برید داخل پانل Properties و اونجا ببینید جلوی رویداد KeyDown اسم متدی رو که میخواید نوشته یا ننوشته؟

در ضمن به این نکته هم توجه کنید که اگه فوکوس روی فرم نباشه، مثلا روی یک TextBox باشه، در این صورت با فشردن کلیدی از صفحه کلید اون رویداد اجرا نمیشه.

احتمالا مشکل شما دومی باشه.

mohammad.es24
شنبه 01 بهمن 1390, 16:40 عصر
ممنون تست میکنم

luckyboy77
شنبه 01 بهمن 1390, 17:18 عصر
اگه میخوایی توی هر حالتی رویداد KeyDown فرم اجرابشه توی پراپرتیز فرم مقدار KeyPreveiw را روی True تنظیم کن. مشکلت حل میشه. حالا فوکوس هر جای فرم باشه فرقی نمی کنه.

gsearch
شنبه 01 بهمن 1390, 17:24 عصر
منم از 3.5 استفاده میکنم ولی حتا بریک پوینت هم که میزارم اصلا انگار نه انگار اصلا وارد KeyDown نمیشه.من دقیقا این کار رو کردم

privatevoid frmBarChartMonth_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F5)
{
btnViewChart_Click(sender, e);
}
}
با سلام،
همونطور که m2_farzan گفتند احتمالاً مشکل فوکوس دارین.
برای حل این مشکل می تونید از PreviewKeyDown استفاده کنید و یادتون نره که پروپرتی KeyPreview فرم رو هم true کنید. باید کارکنه.

mohammad.es24
دوشنبه 03 بهمن 1390, 12:00 عصر
مرسی دوستان خوبم
آره اسم متدمو نوشته.من الان KeyPreview رو True کردم و هم داخل event های KeyDown ,PreviewKeyDown کدمو نوشتم ولی باز کار نمیکنه.مشکلم دقیقا همون فوکوس هستش.ولی بدبختی نمی تونم بیام برای هر چیزی که روی فرم دارم بیام بگم فوکوس کن فلان جاوخیلی زیاده وهم اینکه این کار منطقی به نظر نمیاد

luckyboy77
دوشنبه 03 بهمن 1390, 13:13 عصر
میشه نمونه بذاری؟ شاید بهتر بشه کمک کرد.!!!

mohammad.es24
دوشنبه 03 بهمن 1390, 13:51 عصر
منظور از نمونه،نمونه کد هست یا پروژه؟

saeed_fadai
دوشنبه 03 بهمن 1390, 14:37 عصر
manam ye soal dar hamin zamine daram,age bekhahim az kelidhaye tarkibi mesle Ctrl+F2 estefade konim chek kardanesh be che surate?

luckyboy77
دوشنبه 03 بهمن 1390, 15:29 عصر
دوست عزیز اگه امکان داره پروژه رو بذارید یا نمونه ای از پروژه؟
در این حالت خاص باید تنظیمات فرم و پروژه هم بررسی بشه نمونه کد به تنهایی گویا نیست.

luckyboy77
دوشنبه 03 بهمن 1390, 15:39 عصر
manam ye soal dar hamin zamine daram,age bekhahim az kelidhaye tarkibi mesle Ctrl+F2 estefade konim chek kardanesh be che surate? 1 دوست عزیز لطفا فارسی بنویسید.
2

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control == true && e.KeyCode == Keys.F12)
MessageBox.Show("CTRL + F12");
}

m2_farzan
دوشنبه 03 بهمن 1390, 15:40 عصر
مرسی دوستان خوبم
آره اسم متدمو نوشته.من الان KeyPreview رو True کردم و هم داخل event های KeyDown ,PreviewKeyDown کدمو نوشتم ولی باز کار نمیکنه.مشکلم دقیقا همون فوکوس هستش.ولی بدبختی نمی تونم بیام برای هر چیزی که روی فرم دارم بیام بگم فوکوس کن فلان جاوخیلی زیاده وهم اینکه این کار منطقی به نظر نمیاد

به نظرم اگه مشکلتون به دلیل فوکوس باشه، باید با KeyPreview حل بشه. ضمنا برای انتقال فوکوس به یک کنترل، از متد Select استفاده میشه اما این متد روی فرم جواب نمیده.

مثال باری متد Select:
textBox1.Select();

اگه هیچ راهی پیدا نشد میتونید متد مورد نظر برای KeyDown رو به تمام کنترل ها وصل کنید.

gsearch
دوشنبه 03 بهمن 1390, 15:53 عصر
مرسی دوستان خوبم
آره اسم متدمو نوشته.من الان KeyPreview رو True کردم و هم داخل event های KeyDown ,PreviewKeyDown کدمو نوشتم ولی باز کار نمیکنه.مشکلم دقیقا همون فوکوس هستش.ولی بدبختی نمی تونم بیام برای هر چیزی که روی فرم دارم بیام بگم فوکوس کن فلان جاوخیلی زیاده وهم اینکه این کار منطقی به نظر نمیاد
دوست عزیز،
راه قبلی راه اصولیشه و باید جواب بده. حالا به هر دلیل یه راه دیگه هم هست :

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.F1:
// call function 1
return true;
case Keys.F2:
// call function 2
return true;
// ....
}
return base.ProcessCmdKey(ref msg, keyData);
}

فقط روی return دقت کن که همینطوری انجام بشه.