PDA

View Full Version : سوال: نوشتن تابع برای رویداد KeyPress



amir200h
سه شنبه 22 مرداد 1392, 08:56 صبح
سلام همه دوستان.
من کلی تکست باکس تو فرمم دارم که فقط عدد میگیرن . مجبور شدم تو رویداد keypress هر کدوم کد زیر بزارم.
if (e.KeyChar == 8) { e.Handled = false; return; }
if (e.KeyChar < 48 || e.KeyChar > 57 || e.KeyChar == 32) { e.Handled = true; }


آیا میشه اینو بصورت یه تابع نوشت و تو رویداد keypress هر کدوم از تکست باکس ها فقط این تابع رو صدا زد؟

الیته دوست خوبمون خوخان یه کلاس بهم دادن ولی من از کامپونت استفاده میکنم و اون کلاس روش عمل نمیکنه

danialafshari
سه شنبه 22 مرداد 1392, 10:01 صبح
سلام

اگه می خوای همه ی تکست باکس از یک event پیروی کنن بله میشه
محل کار هستم اینو دستی نوشتم
private void textbox_Keypress()
{
if (e.KeyChar == 8) { e.Handled = false; return; }
if (e.KeyChar < 48 || e.KeyChar > 57 || e.KeyChar == 32) { e.Handled = true; }
}
در فرمت بزار
بعد همه ی تکست باکس ها رو انتخاب کن بعد در قسمت event فلش کناری keypress رو باز کن و textbox_Keypress انتخاب کن :لبخند:
موفق باشی

amir200h
سه شنبه 22 مرداد 1392, 10:06 صبح
سلام

اگه می خوای همه ی تکست باکس از یک event پیروی کنن بله میشه
محل کار هستم اینو دستی نوشتم
private void textbox_Keypress()
{
if (e.KeyChar == 8) { e.Handled = false; return; }
if (e.KeyChar < 48 || e.KeyChar > 57 || e.KeyChar == 32) { e.Handled = true; }
}
در فرمت بزار
بعد همه ی تکست باکس ها رو انتخاب کن بعد در قسمت event فلش کناری keypress رو باز کن و textbox_Keypress انتخاب کن :لبخند:
موفق باشی

دانیال؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟
اولین چیزی که به ذهن خودم رسید و پیاده ش کردم همین بود ولی به e ایراد میگیره

مهرداد صفا
سه شنبه 22 مرداد 1392, 10:07 صبح
با سلام.
1- یک متود سازگار با KeyPressEventHandler بنویسید و آن را به تمام کنترلهای مورد نظر اضافه کنید:


//....
//...
Textbox1.KeyPress+=(KeyPressEventHandler)Textboxes _KeyPress;
Textbox2.KeyPress+=(KeyPressEventHandler)Textboxes _KeyPress;
TextboxN.KeyPress+=(KeyPressEventHandler)Textboxes _KeyPress;
//...
//..
void Textboxes_KeyPress(object sender,KeyPressEventArgs e)
{
if (e.KeyChar == 8) { e.Handled = false; return; }
if (e.KeyChar < 48 || e.KeyChar > 57 || e.KeyChar == 32) { e.Handled = true; }

}

2- از کلاس مورد نظر در یک کلاس ارثبری کنید و رویداد یا متود متناظر آن را باز نویسی کنید و از آن نمونه بسازید.

class NumericTextbox:TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (e.KeyChar == 8) { e.Handled = false; return; }
if (e.KeyChar < 48 || e.KeyChar > 57 || e.KeyChar == 32) { e.Handled = true; }

base.OnKeyPress(e);


}

}
//...
//و به این صورت استفاده کنید:
//..
NumericTextbox numeric = new NumericTextbox();
//....
this.Controls.Add(numeric);

danialafshari
سه شنبه 22 مرداد 1392, 10:13 صبح
vs دم دستم نبود :افسرده:

amir200h
سه شنبه 22 مرداد 1392, 10:14 صبح
ممنونم مهرداد جان. جواب گرفتم از روش اول. واسه دوستان تازه کار اینو هم بگم شاید سوال اون ها هم باشه
این متود رو ساختم
void Textboxes_KeyPress(object sender,KeyPressEventArgs e)
{
if (e.KeyChar == 8) { e.Handled = false; return; }

if (e.KeyChar < 48 || e.KeyChar > 57 || e.KeyChar == 32) { e.Handled = true; }
}

و تو رویداد KeyPress کد زیرو نوشتم
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
Textboxes_KeyPress(sender,e);
}