PDA

View Full Version : سوال: چطور می توان فشرده شدن کلید جهت نمای پایین را در DataGridView تشخیص داد؟



rasol_afkham
سه شنبه 20 خرداد 1393, 12:13 عصر
با سلام،
:متفکر: چطور می توان در زمانی که در حال ویرایش سلولی از DataGridView هستیم (نه زمانی که فوکس بر روی سلولی قرار دارد) فشرده شدن دکمه جهت نمای پایین را تشخیص داد؟
:لبخند: برای مثال فرض کنید بر روی سلولی هستیم و کلمه ای را تایپ می کنیم. (علی) و بعد از تایپ کلمه مورد نظر کلید جهت نمای پایین را فشار می دهیم، حال چطور می توان فشرده شدن آن را تشخیص داد.
:افسرده: مشابه این سوال را در پستهای دیگری هم دیده ام و حتی به آن جواب هم داده اند، ولی چه کنم که هیچی از اون جواب ها متوجه نشدم. :افسرده:

sagggad
سه شنبه 20 خرداد 1393, 12:22 عصر
تو رویداد KeyDown گرید ویو کد کلید فشرده شده رو چک کنید
خیلی راحت فقط باید جستجو کنید

rasol_afkham
سه شنبه 20 خرداد 1393, 12:36 عصر
عزیزم این رویداد تنها بعضی از کلیدها رو تشخص می ده. مثل Esc، Enter،... کلید جهت نمای پایین (↓) رو تشخیص نمی ده. هیچ کدوم از رویدادهای KeyDown, KeyUp و KeyPrss هم کلید جهت نمای پایین (↓) رو تشخیص نمی ده.
در ضمن با استفاده از رویداد EditingControlShowing و خصوصیت Control شیع e این رویداد، هر سه رویداد Key شیع TextBox رو هم به کنترل DataGridView نسبت دادم، همه کلیدها رو تشخیص می ده به غیر از کلید جهت نمای پایین (↓).
:عصبانی++:
البته رویداد KeyDown کلید جهت نمای پایین (↓) تشخیص میده، ولی در زمانی که فوکس برنامه بر روی سلولی قرار داره، ولی من می خواهم در زمانی که سلول در حال ویرایش است این کلید را تشخیص بده.

sagggad
سه شنبه 20 خرداد 1393, 12:54 عصر
تو رویداد KeyDown فرم بنویس و خصوصیت KeyPeriview فرم رو هم برابر True قرار بده شاید درست بشه

rasol_afkham
سه شنبه 20 خرداد 1393, 13:33 عصر
همون ایرادی رو داره که رویداد KeyDown کنترل DataGridView داره. یعنی در زمانی که فوکس برنامه بر روی سلولی قرار داره، فشرده شدن کلیدهای غیر کاراکتری تشخیص داده می شه ولی در زمان ویرایش سلول نه.
خود کنترل DataGridView فشرده شدن این دکمه ها رو تشخیص می ده، فقط نمی دونم با استفاده از کدوم رویداد باید اون را گیر انداخت. بیشتر رویدادهای کنترل DataGridView رو امتحان کردم، هیچ کدوم جواب نداده.
در ضمن در پست زیر (پست 19دهم) سوالی شبیه به همین پرسیده شده و جواب هم داده شده، ولی چیزی ازش سر در نیاوردم
http://barnamenevis.org/showthread.php?245726-%D9%85%D8%B7%D8%A7%D9%84%D8%A8%DB%8C-%DA%A9%D9%85%DB%8C%D8%A7%D8%A8-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-Data-Grid-View&highlight=%D9%85%D8%B7%D8%A7%D9%84%D8%A8%DB%8C+%DA %A9%D9%85%DB%8C%D8%A7%D8%A8+%D8%AF%D8%B1+%D9%85%D9 %88%D8%B1%D8%AF+Data+Grid+View

البته در همین تاپیکی که گفتم کد زیر رو پیدا کردم که مشکل رو کاملا حل می کنه. یعنی در زمان ویرایش سلول می توان فشرده شدن کلید جهت نمای پایین (↓) رو تشخیص داد. اما ایرادی که داره اینه که من می خواهم بعد از فشرده شدن کلید مذکور فوکس برنامه به کنترل ListBox منتقل بشه و وقتی که فوکس رو به لیست منتقل می کنم که داخل اون پر از اسم است، توی اون کنترل کلید جهت نمای پایین (↓) از کار می افته. یعنی دیگه نمی توان با فشار این دکمه به پایین لیست رفت. کلید جهت نمای پایین (↓) در اختیار کنترل DataGridView قرار می گیره نه ListBox ی که فوکس رو به اون منتقل کردم. یعنی وقتی که بر روی ListBox قرار دارم و این کلید رو فشار می دم به جای اینکه به پایین لیست بره کدی که در تابع زیر نوشته شده اجرا می شه. اما با کلید جهت نمای بالا (↑) می توان به بالای لیست حرکت کرد.



protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Enter:
try
{
dgvIncmNew.CurrentCell =
dgvIncmNew[dgvIncmNew.CurrentCell.ColumnIndex + 1,
dgvIncmNew.CurrentCell.RowIndex];
}
catch{}
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

rasol_afkham
سه شنبه 20 خرداد 1393, 14:18 عصر
:قهقهه::قهقهه::قهقهه::قهقهه:
مشکلم حل شد. تو کدی که نوشتم در خط 13 مقدار return true رو برابر با return false کردم مشکل حل شد