PDA

View Full Version : ثبت دیتا با فشردن کلیک اینتر در فرم با وجود فوکوس روی اشیا دیگر



sg.programmer
دوشنبه 24 مهر 1396, 20:54 عصر
سلام
چطور میشه با فشردن کلیک اینتر در فرم با وجود فوکوس روی اشیا دیگر مثل تکس باکس یک تابع ای اجرا بشه؟
من از رویداد Form_KeyDown استفاده کردم ولی چون فوکوس روی تکس باکس هست تابع فراخوانی نمیشه!

private void AddForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
_InsertForm();
}
}



و همچنین آیا دکمه ها هم shortcut key دارند؟

رامین مرادی
سه شنبه 25 مهر 1396, 08:24 صبح
شما تو رویداد KeyUp فرمتون بنویسید .من با این روش کارامو انجام میدم و خوب جواب داده



private void CategoryFrm_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
{
btnNew_Click(null, null);
}
if (e.KeyCode == Keys.F3)
{
btnNew2_Click(null, null);
}
if (e.KeyCode == Keys.Escape)
{
btnCancel_Click(null, null);
}
if (e.KeyCode == Keys.F1)
{
btnClose_Click(null, null);
}
}

danialafshari
سه شنبه 25 مهر 1396, 11:47 صبح
سلام
چطور میشه با فشردن کلیک اینتر در فرم با وجود فوکوس روی اشیا دیگر مثل تکس باکس یک تابع ای اجرا بشه؟
من از رویداد Form_KeyDown استفاده کردم ولی چون فوکوس روی تکس باکس هست تابع فراخوانی نمیشه!

private void AddForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
_InsertForm();
}
}



با سلام
کدتون مشکل نداره فقط تنها کاری که باید بکنید خصوصیت KeyPreview فرمتون رو True کنید

و همچنین آیا دکمه ها هم shortcut key دارند؟
دکمه های پیش فرض خیر ولی کامپوننت هایی مثل janus و devComponent بله
برای کلید Enter هم یک خصوصیت فرم داره بنام AcceptButton که میتونید دکمه مورد نظر رو توش تنظیم کنید. از این پس کلید enter اون button رو اجرا می کنه
همچنین خاصیت CancelButton که با دکمه ESC هست و معمولا برای دکمه بستن فرم استفاده میشه
موفق باشید

sg.programmer
سه شنبه 25 مهر 1396, 14:28 عصر
من از این روش استفاده کردم کدوم بهتره؟ KeyPreview & ProcessCmdKey


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{

if (keyData == Keys.Enter)
{
_InsertForm();
return true;
}
else if (keyData == Keys.F1)
{
_btnNewClick();
return true;
}
else if (keyData == Keys.Escape)
{
Close();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

danialafshari
چهارشنبه 26 مهر 1396, 00:57 صبح
با سلام
همون روشی که بالا گفتم


برای کلید Enter هم یک خصوصیت فرم داره بنام AcceptButton که میتونید دکمه مورد نظر رو توش تنظیم کنید. از این پس کلید enter اون button رو اجرا می کنه
همچنین خاصیت CancelButton که با دکمه ESC هست و معمولا برای دکمه بستن فرم استفاده میشه

sg.programmer
چهارشنبه 26 مهر 1396, 14:37 عصر
تشکر آقای افشاری

یک مشکلی که پیش میاد اینه که اگه روی کامبو باکس باشه و کاربر در موقع پر کردن مقداری باشه و برای انتخاب اینتر را میزنه و در این حالت دکمه ثبت عمل میشه که نمیخوام کلید اینتر روی بعضی از اشیاء اینتر خورده و اعمال بشه. برای رفع این مشکل چیکار باید کرد؟

danialafshari
چهارشنبه 26 مهر 1396, 16:56 عصر
تشکر آقای افشاری

یک مشکلی که پیش میاد اینه که اگه روی کامبو باکس باشه و کاربر در موقع پر کردن مقداری باشه و برای انتخاب اینتر را میزنه و در این حالت دکمه ثبت عمل میشه که نمیخوام کلید اینتر روی بعضی از اشیاء اینتر خورده و اعمال بشه. برای رفع این مشکل چیکار باید کرد؟

خواهش میکنم
من در پروژه هام برای ثبت از کلید ترکیبی (Ctrl + Enter) استفاده می کنم و روی Button هم کلید ترکیبیهامو مینویسم
و از Enter برای Tab شدن بین Object ها استفاده می کنم
چون از کامپوننت استفاده می کنم نیازی به کدنویسی برای کلید ترکیبی نیست ولی شما می تونید از این کد استفاده کنید

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

اینم برای Tab شدن با Enter :

protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
return base.ProcessDialogKey(Keys.Tab);
}
return base.ProcessDialogKey(keyData);
}

دیگه هر جور میلتونه
موفق باشید