PDA

View Full Version : سوال: چگونگي تعريف يك Event_Handler سراسري



Programmer 1
دوشنبه 05 مهر 1389, 00:18 صبح
سلام ،

دوستان من چندتا تكست باكس تو يك فرم دارم ، حالا مي خوام وقتي فوكوس به تكست باكسي وارد بشه كل

متن داخلش انتخاب بشه ، اين رو مي دونم كه برم داخل رويداد Enter هر تكست باكس و كد رو وارد كنم ولي

من ميخوام يك Event بنويسم كه حالت كلي داشته باشه و براي تك تك تكست باكس ها اين كد تكراري رو

وارد نكنم ، به عبارتي به جاي اينكه به تعداد تكست باكس ها متد كنترل رويداد ايجاد كنم فقط از يك متد كنترل رويداد استفاده كنم . لطفا راهنمايي كنيد .

با تشكر /.

mahziar
دوشنبه 05 مهر 1389, 00:39 صبح
سلام ،

دوستان من چندتا تكست باكس تو يك فرم دارم ، حالا مي خوام وقتي فوكوس به تكست باكسي وارد بشه كل

متن داخلش انتخاب بشه ، اين رو مي دونم كه برم داخل رويداد Enter هر تكست باكس و كد رو وارد كنم ولي

من ميخوام يك Event بنويسم كه حالت كلي داشته باشه و براي تك تك تكست باكس ها اين كد تكراري رو

وارد نكنم ، به عبارتي به جاي اينكه به تعداد تكست باكس ها متد كنترل رويداد ايجاد كنم فقط از يك متد كنترل رويداد استفاده كنم . لطفا راهنمايي كنيد .

با تشكر /.

خوب برای یکی بنویس ، بعد برای بقیه از همون یکی که کد نوشتی استفاده کن .

فقط برای این که مشخص کنی کدوم تکست باکس رو باید تغییرات انجام بدی باید از :


((TextBox)sender).SelectAll();


استفاده کنی

Programmer 1
دوشنبه 05 مهر 1389, 23:52 عصر
دوست عزيز مشكرم ولي مشكل هنوز حل نشده ، هنوز فقط كد در مورد همون تكست باكسي كه كد داخلش نوشته شده عمل مي كنه و ساير تكست باكس ها هيچ واكنشي نشون نمي دن

mmd2009
دوشنبه 05 مهر 1389, 23:55 عصر
با سلام

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

mahziar
سه شنبه 06 مهر 1389, 00:08 صبح
دوست عزيز مشكرم ولي مشكل هنوز حل نشده ، هنوز فقط كد در مورد همون تكست باكسي كه كد داخلش نوشته شده عمل مي كنه و ساير تكست باكس ها هيچ واكنشي نشون نمي دن

احتمالا اشتباه منظورمو گرفتی .

شما برای یه تکست باکس این کد رو بنویس
بعد نام همون تابع نوشته شده رو برای Event بقیه تکست باکس ها استفاده کن و تابع جدید برای اونا ننویس !

Programmer 1
سه شنبه 06 مهر 1389, 23:48 عصر
احتمالا اشتباه منظورمو گرفتی .

شما برای یه تکست باکس این کد رو بنویس
بعد نام همون تابع نوشته شده رو برای Event بقیه تکست باکس ها استفاده کن و تابع جدید برای اونا ننویس !

دوست عزيز متشكرم ولي من دقيقا منظورم اين هست كه مثلا 10 تا تكست باكس داريم ، حالا براي ايونت Enter تكست باكس اولي كد زير را وارد مي كنم :


void txtFname_Enter(object sender, EventArgs e)
{
txtFname.SelectAll();
}

براي ايونت تكست باكس دومي هم بايد كد زير وارد بشه :


void txtLname_Enter(object sender, EventArgs e)
{
txtFname.SelectAll();
}

حالا همين كارها رو اگه براي 20 تكست باكس انجام بديم ،‌كد زيادي توليد ميشه كه برنامه رو شلوغ مي كنه من نمي خوام اين همه كد بنويسم و قصد كوتاه سازي كد ها رو دارم طوري كه فقط با 3 ، 4 خط كد براي همه تكست باكس ها اين كار انجام بشه .

اميدوارم كه متوجه شده باشيد

با تشكر /.

hamid.shekasteh
چهارشنبه 07 مهر 1389, 01:10 صبح
از ارث بری کمک بگیرید، به این ترتیب که یه کلاس از TextBox مشتقق کنید(Inherit)، بعد این رویدادو براش تعریف کنید با event ,delegate. . قبلا یه همچین چیزی رو توی این زمینه براتون گذاشتم.
بعد Build کنید و از توی ToolBox اون کلاسی رو که نوشتید روی فرم بذارید.خواستید بگید کد بذارم.

Programmer 1
پنج شنبه 08 مهر 1389, 00:07 صبح
از ارث بری کمک بگیرید، به این ترتیب که یه کلاس از TextBox مشتقق کنید(Inherit)، بعد این رویدادو براش تعریف کنید با event ,delegate. . قبلا یه همچین چیزی رو توی این زمینه براتون گذاشتم.
بعد Build کنید و از توی ToolBox اون کلاسی رو که نوشتید روی فرم بذارید.خواستید بگید کد بذارم.

Delegate اصلا كار نكردم ولي خوب يه كاريش مي كنم ،‌ اگه كدي كه فرموديد رو قرار بديد ممنون مي شم

با تشكر /.

mahziar
پنج شنبه 08 مهر 1389, 00:38 صبح
اميدوارم كه متوجه شده باشيد.


دوست عزیز من خوب گرفتم شما چی میخوای .

شما هنوز منظوره منو متوجه نشدی برای همین یه سمپل نوشتم که خوب حرفمو بگیری ،تو این سمپل 10 تا تکست باکسه و یه تابع textBox_Enter ( به خدا فقط یکی نه کمتر و نه بیشتر ) که به عنوان Enter Event همه تکست باکسا قرار داده شده (یعنی من برای تکست باکس اول اونو نوشتم ، بعد قسمت textBox_Enter اونو کپی گرفتم ، و برای تمام تکست باکسهای دیگه تو قسمت Enter Event اونو Paste کردم )

در واقه همه تکست باکس ها دارن از یه Event استفاده میکنن و تشخیص این که کدوم تکست باکس Enter شده با sender ش مشخص میشه

دیگه از این واضح تر واقعا نمیتونم توضیح بدم !!!!!!!!!!!!!!!!!!!!!!!

اگه این سمپل رو دیدی و باز هم متوجه نشدی ، حتما من یه مشکلی دارم !!!!!!

ali_autumnal
پنج شنبه 08 مهر 1389, 01:19 صبح
یه تابع بفرم زیر بنویس:



private void SelectAllText(object sender)
{
((TextBox)sender).SelectAll();
}

بعد همه تکست باکس ها رو select کن
برو تو رویداد مثلا کلیک اسم این تابع رو بنویس.
وسلام.

موفق باشید
علی پاییزی

hamid.shekasteh
شنبه 10 مهر 1389, 09:26 صبح
private void SelectAllText(object sender)
{
((TextBox)sender).SelectAll();
}


خوبه اما در نظر بگیرین که این روش برای همه ی فرم ها احتیاج به یک بار کد نویسی ندارد.(هر فرم یکبار)



Delegate اصلا كار نكردم ولي خوب يه كاريش مي كنم ،‌ اگه كدي كه فرموديد رو قرار بديد ممنون مي شم

با تشكر /.


delegate رو بی خیال.
اینم نمونه کد ، امیدوارم به کارتون بیاد، اسم کلاس مورد نظر رو txt گذاشتم و بعد از نوشتن F6 رو بزنید و کنترل txt رو از روی toolbox به فرمتون بندازید.



public class txt:TextBox
{
protected override void OnGotFocus(EventArgs e)
{
this.Select(0, Text.Length);

base.OnGotFocus(e);
}
}

Programmer 1
یک شنبه 11 مهر 1389, 00:42 صبح
دیگه از این واضح تر واقعا نمیتونم توضیح بدم !!!!!!!!!!!!!!!!!!!!!!!

اگه این سمپل رو دیدی و باز هم متوجه نشدی ، حتما من یه مشکلی دارم !!!!!!

قربان شما ، شما هيچ مشكلي نداريد و مشكل از بنده بود .

دوست عزيز ، واقعا نيازي به اين همه علامت تعجب بود ؟ ، درسته مبتدي هستم ولي شما هم ديگه اين كارو

نكن ، اون پست اولي كه نوشتيد واقعيتش اين جا رو متوجه نشدم :


خوب برای یکی بنویس ، بعد برای بقیه از همون یکی که کد نوشتی استفاده کن .

ولي خوب تو اين پستي كه نوشتيد كاملا متوجه شدم و با توجه به مثالي كه قرار داديد همه چيز رو گرفتم .
اگر بيان من باعث دلخوري شما شده ، پوزش ميخواهم .

با تشكر فراوان /.