PDA

View Full Version : کلید Enter به جای Tab برای DataGridView



AmirAmiri
سه شنبه 13 مهر 1389, 12:40 عصر
سلام به تمام اساتید.
من کد زیر رو برای شبیه سازی کلید Enter به جای کلید Tab نوشتم اما مشکلم اینجاست که DataGridView کلید Enter رو به منزله کلید Down میشناسه و زمانی که کلید Enter رو میزنم ، خود به خود میره به رکورد بعدی و بعد کد زیر اجرا میشه در واقع اطلاعات رکورد بعدی رو به من میده.

private void dgvNextControl(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
SendKeys.Send("{TAB}");
}

AmirAmiri
سه شنبه 13 مهر 1389, 14:17 عصر
کــــــــــمـــــــــــــ ـکـــــــــــــــــــم کنـــــــــــــــــــــــ یــــــــــــــــــــــد.

الان (24 کاربران & 30 مهمان) تو فروم سی شارپ هست یعنی هیچ کس نیست به من کمک کنه؟

AmirAmiri
سه شنبه 13 مهر 1389, 18:04 عصر
خیلی خوشحالم که همه به این تاپیک توجه خاصی دارن و به بنده کمک میکنن. (بشه جبران کنیم)
دیگه چطوری بگم کارم گیر کرده و این مسئله حتما باید حل بشه؟؟

ali.rezaei7
سه شنبه 13 مهر 1389, 18:13 عصر
عزیز جان فکر نمی کنم راه منطقی برای این کار باشه.
ولی اگه SendKeys.Send دیگه برای برگشت به رکورد قبلی بزاری فکر می کنم درست بشه.

Javad_raouf
سه شنبه 13 مهر 1389, 18:23 عصر
سلام
اگر یکم صبر کنید به جوابتان می رسید
چت روم که نیست توقع دارید هم تاپیک زدید همه بریزند به شما جواب دهند

در خاصیت Keydown دیتا گیرید ویو کد زیر را بنویسید:


if (e.KeyCode == Keys.Enter) e.Handled = true;

AmirAmiri
سه شنبه 13 مهر 1389, 18:28 عصر
سلام
اگر یکم صبر کنید به جوابتان می رسید
چت روم که نیست توقع دارید هم تاپیک زدید همه بریزند به شما جواب دهند

در خاصیت Keydown دیتا گیرید ویو کد زیر را بنویسید:


if (e.KeyCode == Keys.Enter) e.Handled = true;

بابا خیلی وقته تاپیک زدم هیچ کی کمک نمیکنه. مرسی از اما اگه اینکارو بکنم دیگه چطوری کلید Enter رو دریافت کنم؟

Javad_raouf
سه شنبه 13 مهر 1389, 18:50 عصر
بابا خیلی وقته تاپیک زدم هیچ کی کمک نمیکنه.
کلا 6 ساعته تاپیک رو زدید
چطور حساب کردید 6 ساعت شد خیلی وقت؟:متفکر:
نکنه توقع دارید هم تاپیک زدید همه بریزند توی تاپیک تا به شما جواب دهند؟
یا فکر کردید همه کاربرا 24 ساعته انلاین هستند
اگر بعد از 3 - 4 روز از زدن تاپیکتان هیچ کس جوابی به شما نداد آن وقت است که می توان حرفی زد
نه بعد از 6 ساعت:چشمک:

مرسی از اما اگه اینکارو بکنم دیگه چطوری کلید Enter رو دریافت کنم؟
شما دقیقا کجا می خواهید Enter رو دریافت کنید؟
خوب بعد از اینکه دریافتش کردید e.Handled رو true بکنید
یا مثلا اول مقدار e.KeyCode رو توی یک متغیر از نوع Keys ذخیره کنید بعد این کار رو بکنید

sds1920
سه شنبه 13 مهر 1389, 19:37 عصر
اگه توی متد KeyPress بنویسی حل می شه.

AmirAmiri
سه شنبه 13 مهر 1389, 21:04 عصر
کلا 6 ساعته تاپیک رو زدید
چطور حساب کردید 6 ساعت شد خیلی وقت؟:متفکر:
نکنه توقع دارید هم تاپیک زدید همه بریزند توی تاپیک تا به شما جواب دهند؟
یا فکر کردید همه کاربرا 24 ساعته انلاین هستند
اگر بعد از 3 - 4 روز از زدن تاپیکتان هیچ کس جوابی به شما نداد آن وقت است که می توان حرفی زد
نه بعد از 6 ساعت:چشمک:

شما دقیقا کجا می خواهید Enter رو دریافت کنید؟
خوب بعد از اینکه دریافتش کردید e.Handled رو true بکنید
یا مثلا اول مقدار e.KeyCode رو توی یک متغیر از نوع Keys ذخیره کنید بعد این کار رو بکنید

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


چطور حساب کردید 6 ساعت شد خیلی وقت؟

کــــــــــمـــــــــــــ ـکـــــــــــــــــــم کنـــــــــــــــــــــــ یــــــــــــــــــــــد.

الان (24 کاربران & 30 مهمان) تو فروم سی شارپ هست یعنی هیچ کس نیست به من کمک کنه؟
به نظره شما 24 کاربر توی فروم در عرض 6 ساعت هیچی نیست؟
حالا کاری به این حرفا ندارم نمیخوام بحث رو منحرف کنم چون خیلی کارم گیره اما من هر تاپیک تازه و بدونه پاسخی میدیدم بلافاصله جواب میدادم طوری که طرف فکر میکنه داره چت میکنه.
توی فروم بودن کسانی که خیلی حرفه ای بودن و میتونستن کمک کنن اما کمک نکردن در عوض چکار میکردن؟ میرفتن توی تاپیکهایی که 10 نفر جواب درست دادن و مشکل حل شده ، یک جواب دیگه به جوابها اضافه میکردن. به نظره شما توی تاپیکی که همه جوابه درست رو دادن لازمه پست اضافی داد؟ اما این تاپیک که هیچ جوابی داده نشده رو ول کرد؟

حالا از این بحث بگذریم.


اگه توی متد KeyPress بنویسی حل می شه.
ممنون دوست عزیز اما اگه توی KeyPress بنویسم چطوری کلید Enter رو تشخیص بدم؟ این رویداد فقط کاراکتر دریافت میکنه اما من میخوام کلیدهای کنترلی هم دریافت بشه مثل کلید Down یا Shift و امثاله اینا.

flash118
سه شنبه 13 مهر 1389, 22:15 عصر
با سلام دوست عزیز یه نمونه کذ براتون گذاشتم البته اونی نیست که شما میخواهید ولی راهنمای خوبی هست و اگه بپسندید فکر کنم از اینتر هم بهتر باشه یه نگاه کنید این کد برای کار با دکمه وسط ماوس جابجا میشه نمونه رو ببینید فکر کنم مشکل حله

private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.MouseWheel += new MouseEventHandler(dataGridView1_MouseWheel);
}
private void dataGridView1_MouseWheel(object sender, MouseEventArgs e)
{

dataGridView1.EndEdit();
if (e.Delta.Equals(120) && dataGridView1.CurrentRow.Index != 0)
SendKeys.Send("{Up}");

else if (!e.Delta.Equals(120) && dataGridView1.CurrentRow.Index != dataGridView1.Rows.Count - 1)

SendKeys.Send("{Down}");
}

AmirAmiri
سه شنبه 13 مهر 1389, 22:28 عصر
سلام جناب flash118 عزیز. خیلی ازتون ممنونم به خاطره کده مفیدی که قرار داد حتما در جاهایه دیگه ازش استفاده میکنم اما اینجا به کارم نمیاد آخه مجبورم از همون Enter استفاده کنم. چیزیه که مشتری ازم خواسته و همچنین نرم افزارهای همسان هم از Enter استفاده کردن و همه اینطوری عادت کردن.
اگه بتونید برای کلید Enter راه حلی پیدا کنید خیلی ممنون میشم.
بازم مرسی.

ali.rezaei7
سه شنبه 13 مهر 1389, 23:09 عصر
ورودی تابع سند باید به این صورت باشه:
"{UP}{TAB}"
کد بالا درست کار می کنه ولی باید اونو در رویداد مناسبتری بنویسید. چون رویداد keydown زمانی اجرا می شه که کاربر داخل سلول نباشه. یعنی زمانی اجرا می شه که سلول فقط در حال انتخاب باشه .

nPad.Net
سه شنبه 13 مهر 1389, 23:28 عصر
سلام دوست من!
تو این مقاله جواب سوالتونو میتونید ببینید:

http://www.codeproject.com/KB/grid/DataGridViewEx.aspx

موفق باشید.

AmirAmiri
سه شنبه 13 مهر 1389, 23:31 عصر
ورودی تابع سند باید به این صورت باشه:
"{UP}{TAB}"
کد بالا درست کار می کنه ولی باید اونو در رویداد مناسبتری بنویسید. چون رویداد keydown زمانی اجرا می شه که کاربر داخل سلول نباشه. یعنی زمانی اجرا می شه که سلول فقط در حال انتخاب باشه .
واقعا ممنونم دوست عزیز. :قلب: :قلب:
مشکلم حل شد واقعا مرسی از لطفت. همه کارم گیر کرده بود به همین یه مورد.
کدی که دادی رو توی رویداد KeyUp نوشتم و الان درست شده فقط زمانی که به آخرین رکورد میرسه و Enter میکنه مشکل داشت که با یک شرط ساده درست شد.
خیلی لطف کردی.
از همه دوستان دیگه هم که کمک کردن ممنونم.