PDA

View Full Version : استفاده از کلید enter در فرم



mohammady2
سه شنبه 21 خرداد 1387, 07:17 صبح
سلام
1.من میخوام در صفحه با زدن کلید enter فرم بعدی رو نمایش بدم .کاری که با فشردن مثلا یه دکمه توی همون فرم انجام میدم . کد پایین رو از تو سایت برداشتم .یه تغییراتی برای enter بهش دادم اما...نشد

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control)
{
if (e.KeyCode == Keys.A)
this.tabControl1.SelectedIndex = 0;
else
if (e.KeyCode == Keys.B)
this.tabControl1.SelectedIndex = 1;
}

***ویرایش شده توسط مدیر بخش - علیرضا مداح***
این سوال بیسار تکراریست ،
در ضمن در هر تاپیک فقط و فقط یک سوال مطرح نمایید ،/
باتشکر

mehrnoosh_al62
سه شنبه 21 خرداد 1387, 08:17 صبح
از
ProcessCmdKey استفاده کن
برای باز کردن فرم جدید از کد زیر استفاده کن :


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.Msg == 0x0100)
{
switch (keyData)
{
case Keys.Enter:
{
//show new form code
}
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}


برای حرکت روی textbox ها :



protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.Msg == 0x0100)
{
switch (keyData)
{
case Keys.Enter:
{
this.SelectNextControl(this.ActiveControl, true, true, true, false);
if (this.ActiveControl is TextBox)
((TextBox)this.ActiveControl).SelectAll();
return true;
}
}
}
return base.ProcessCmdKey(ref msg, keyData);
}

razavi_university
سه شنبه 21 خرداد 1387, 11:55 صبح
سلام
1.من میخوام در صفحه با زدن کلید enter فرم بعدی رو نمایش بدم .کاری که با فشردن مثلا یه دکمه توی همون فرم انجام میدم . کد پایین رو از تو سایت برداشتم .یه تغییراتی برای enter بهش دادم اما...نشد

1- براي اينكه كدتون كار بكنه خاصيت KeyPreview فرمتون رو True كنين

2- يه روش ديگه اينه كه يك دكمه روي فرم بگذارين و خاصيت AcceptButton فرمتون رو برابر اين دكمه بگذاريد و براي نمايش ندادنش خاصيت Visible دكمه رو False كنين


با تشکر از مدیر ،/

mohammad272005
سه شنبه 21 خرداد 1387, 20:24 عصر
2.ضمنا اگه با enter بخوایم رو تکست باکسها یه شماره ترتیب tab اونها حرکت بکنیم چی کار باید کرد؟تو formLoad اين رو بنويسيد:
TextBox textBox;
foreach (Control control inthis.Controls)
{
if ((textBox = control asTextBox) != null)
textBox.KeyPress += delegate(object KeyPress_sender, KeyPressEventArgs KeyPress_e)
{
if (KeyPress_e.KeyChar == '\r')
{
this.SelectNextControl(KeyPress_sender asTextBox, true, true, true, true);
KeyPress_e.Handled = true;
}
};

mohammady2
چهارشنبه 22 خرداد 1387, 06:48 صبح
از
ProcessCmdKey استفاده کن
برای باز کردن فرم جدید از کد زیر استفاده کن :


protectedoverridebool ProcessCmdKey(refMessage msg, Keys keyData)
{
if (msg.Msg == 0x0100)
{
switch (keyData)
{
caseKeys.Enter:
{
//show new form code
}
returntrue;
}
}
returnbase.ProcessCmdKey(ref msg, keyData);
}


برای حرکت روی textbox ها :



protectedoverridebool ProcessCmdKey(refMessage msg, Keys keyData)
{
if (msg.Msg == 0x0100)
{
switch (keyData)
{
caseKeys.Enter:
{
this.SelectNextControl(this.ActiveControl, true, true, true, false);
if (this.ActiveControl isTextBox)
((TextBox)this.ActiveControl).SelectAll();
returntrue;
}
}
}
returnbase.ProcessCmdKey(ref msg, keyData);
}
s=سلام .ممنون از جوابتون .میشه کمی در مورد کدتون توضیح بدید من نمیدونمProcessCmdKey چی هست کجا باید استفاده کنم؟
ضمن اینکه اونو وقتی تومتن کپی میکنم بعض از کلماتش رو نمیشناسه مثل ref، istextbox.ایا namespace خاصی نیازه؟

mohammady2
چهارشنبه 22 خرداد 1387, 06:50 صبح
تو formLoad اين رو بنويسيد:
TextBox textBox;
foreach (Control control inthis.Controls)
{
if ((textBox = control asTextBox) != null)
textBox.KeyPress += delegate(object KeyPress_sender, KeyPressEventArgs KeyPress_e)
{
if (KeyPress_e.KeyChar == '\r')
{
this.SelectNextControl(KeyPress_sender asTextBox, true, true, true, true);
KeyPress_e.Handled = true;
}
}; کد شما هم جواب نداد اینم namespace خاصی میخواد؟ بعضی کلماتش رو قرمز میکنه مثلasTextBox

mehrnoosh_al62
چهارشنبه 22 خرداد 1387, 09:01 صبح
سلام از processcmdkey باید مثل یه تابع استفاده کنید به شکل پیش فرض تو c# هست به namespace خاصی هم نیاز نداره در ضمن احتمالا شما درست copy نکردید مثلا بین is و textbox باید فاصله باشه

mohammady2
پنج شنبه 23 خرداد 1387, 06:49 صبح
قطعه کد زیر از جناب sinpin به طور کامل جواب من برای این تاپیک بود.
البته برای کنترلهای استاندارد
من یه تقویم فارسی برای گرفتن تاریخ از کاربر از سایت گرفتم و توی فرمم گذاشتم
با زدن کلید اینتر با قطعه کد زیربخوبی هم اینتر رو تکست باکسها جابجا میشه وهم رو دکمه ها اینتر میخوره و فرم بعدی رو نشون میده

protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Return)
SendKeys.Send("{TAB}");
return base.ProcessDialogKey(keyData);
}


مشکل تو اون تقویمه ست .اومدم توی فرمم کلاس زیر رو براش اضافه کردم.
جالبه حالا درست شده اما به ترتیب شماره تب جابجا نمیشه دو تا یکی در میون.. دلبخواه جابجا میشه
؟؟؟؟ چرا؟
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
SendKeys.Send("{TAB}");
}

mohammad272005
پنج شنبه 23 خرداد 1387, 17:34 عصر
کد شما هم جواب نداد اینم namespace خاصی میخواد؟ بعضی کلماتش رو قرمز میکنه مثلasTextBoxالبته حق با شماست راستش نمي دونم چرا من كدهايي كه مي فرستم حروف space " " توشون از بين مي ره. براي مثال: asTextBox يعني as TextBox. و من واقعا در اين مورد تقصيري ندارم. كدي كه به شما دادم دقيقا همون كديه كه من خودم تو كدها ازش استفاده مي كنم.

khoshtip118
پنج شنبه 23 خرداد 1387, 17:46 عصر
كاره خاصي نداره كافيه تو keypress فرمتون اينو بفويسيد


if (e.KeyChar.GetHashCode() == 851981)
{
form.show()


};
851981 كد اسكي كليد اينتر

mohammady2
شنبه 25 خرداد 1387, 07:22 صبح
سلام .مشکل همچنان برای کنترل غیر استاندارد باقیه .با کدهای شما دوستان فقط
رو تکست باکسهای اصلی حرکت میکنه کافیه بین همه تکست باکسها یه غیر کنترل استاندارد داشته باشید!!!!! جناب sinpin اگه کدتون رو توضیح بدید ممنون میشم