View Full Version : سوال: چگونگي تعريف يك Event_Handler سراسري
Programmer 1
یک شنبه 04 مهر 1389, 23:18 عصر
سلام ،
دوستان من چندتا تكست باكس تو يك فرم دارم ، حالا مي خوام وقتي فوكوس به تكست باكسي وارد بشه كل
متن داخلش انتخاب بشه ، اين رو مي دونم كه برم داخل رويداد Enter هر تكست باكس و كد رو وارد كنم ولي
من ميخوام يك Event بنويسم كه حالت كلي داشته باشه و براي تك تك تكست باكس ها اين كد تكراري رو
وارد نكنم ، به عبارتي به جاي اينكه به تعداد تكست باكس ها متد كنترل رويداد ايجاد كنم فقط از يك متد كنترل رويداد استفاده كنم . لطفا راهنمايي كنيد .
با تشكر /.
mahziar
یک شنبه 04 مهر 1389, 23:39 عصر
سلام ،
دوستان من چندتا تكست باكس تو يك فرم دارم ، حالا مي خوام وقتي فوكوس به تكست باكسي وارد بشه كل
متن داخلش انتخاب بشه ، اين رو مي دونم كه برم داخل رويداد Enter هر تكست باكس و كد رو وارد كنم ولي
من ميخوام يك Event بنويسم كه حالت كلي داشته باشه و براي تك تك تكست باكس ها اين كد تكراري رو
وارد نكنم ، به عبارتي به جاي اينكه به تعداد تكست باكس ها متد كنترل رويداد ايجاد كنم فقط از يك متد كنترل رويداد استفاده كنم . لطفا راهنمايي كنيد .
با تشكر /.
خوب برای یکی بنویس ، بعد برای بقیه از همون یکی که کد نوشتی استفاده کن .
فقط برای این که مشخص کنی کدوم تکست باکس رو باید تغییرات انجام بدی باید از :
((TextBox)sender).SelectAll();
استفاده کنی
Programmer 1
دوشنبه 05 مهر 1389, 22:52 عصر
دوست عزيز مشكرم ولي مشكل هنوز حل نشده ، هنوز فقط كد در مورد همون تكست باكسي كه كد داخلش نوشته شده عمل مي كنه و ساير تكست باكس ها هيچ واكنشي نشون نمي دن
mmd2009
دوشنبه 05 مهر 1389, 22:55 عصر
با سلام
شما میتونید از یک یوزر کنترل استفاده بکنید.
mahziar
دوشنبه 05 مهر 1389, 23:08 عصر
دوست عزيز مشكرم ولي مشكل هنوز حل نشده ، هنوز فقط كد در مورد همون تكست باكسي كه كد داخلش نوشته شده عمل مي كنه و ساير تكست باكس ها هيچ واكنشي نشون نمي دن
احتمالا اشتباه منظورمو گرفتی .
شما برای یه تکست باکس این کد رو بنویس
بعد نام همون تابع نوشته شده رو برای Event بقیه تکست باکس ها استفاده کن و تابع جدید برای اونا ننویس !
Programmer 1
سه شنبه 06 مهر 1389, 22: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, 00:10 صبح
از ارث بری کمک بگیرید، به این ترتیب که یه کلاس از TextBox مشتقق کنید(Inherit)، بعد این رویدادو براش تعریف کنید با event ,delegate. . قبلا یه همچین چیزی رو توی این زمینه براتون گذاشتم.
بعد Build کنید و از توی ToolBox اون کلاسی رو که نوشتید روی فرم بذارید.خواستید بگید کد بذارم.
Programmer 1
چهارشنبه 07 مهر 1389, 23:07 عصر
از ارث بری کمک بگیرید، به این ترتیب که یه کلاس از TextBox مشتقق کنید(Inherit)، بعد این رویدادو براش تعریف کنید با event ,delegate. . قبلا یه همچین چیزی رو توی این زمینه براتون گذاشتم.
بعد Build کنید و از توی ToolBox اون کلاسی رو که نوشتید روی فرم بذارید.خواستید بگید کد بذارم.
Delegate اصلا كار نكردم ولي خوب يه كاريش مي كنم ، اگه كدي كه فرموديد رو قرار بديد ممنون مي شم
با تشكر /.
mahziar
چهارشنبه 07 مهر 1389, 23:38 عصر
اميدوارم كه متوجه شده باشيد.
دوست عزیز من خوب گرفتم شما چی میخوای .
شما هنوز منظوره منو متوجه نشدی برای همین یه سمپل نوشتم که خوب حرفمو بگیری ،تو این سمپل 10 تا تکست باکسه و یه تابع textBox_Enter ( به خدا فقط یکی نه کمتر و نه بیشتر ) که به عنوان Enter Event همه تکست باکسا قرار داده شده (یعنی من برای تکست باکس اول اونو نوشتم ، بعد قسمت textBox_Enter اونو کپی گرفتم ، و برای تمام تکست باکسهای دیگه تو قسمت Enter Event اونو Paste کردم )
در واقه همه تکست باکس ها دارن از یه Event استفاده میکنن و تشخیص این که کدوم تکست باکس Enter شده با sender ش مشخص میشه
دیگه از این واضح تر واقعا نمیتونم توضیح بدم !!!!!!!!!!!!!!!!!!!!!!!
اگه این سمپل رو دیدی و باز هم متوجه نشدی ، حتما من یه مشکلی دارم !!!!!!
ali_autumnal
پنج شنبه 08 مهر 1389, 00:19 صبح
یه تابع بفرم زیر بنویس:
private void SelectAllText(object sender)
{
((TextBox)sender).SelectAll();
}
بعد همه تکست باکس ها رو select کن
برو تو رویداد مثلا کلیک اسم این تابع رو بنویس.
وسلام.
موفق باشید
علی پاییزی
hamid.shekasteh
شنبه 10 مهر 1389, 08: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
شنبه 10 مهر 1389, 23:42 عصر
دیگه از این واضح تر واقعا نمیتونم توضیح بدم !!!!!!!!!!!!!!!!!!!!!!!
اگه این سمپل رو دیدی و باز هم متوجه نشدی ، حتما من یه مشکلی دارم !!!!!!
قربان شما ، شما هيچ مشكلي نداريد و مشكل از بنده بود .
دوست عزيز ، واقعا نيازي به اين همه علامت تعجب بود ؟ ، درسته مبتدي هستم ولي شما هم ديگه اين كارو
نكن ، اون پست اولي كه نوشتيد واقعيتش اين جا رو متوجه نشدم :
خوب برای یکی بنویس ، بعد برای بقیه از همون یکی که کد نوشتی استفاده کن .
ولي خوب تو اين پستي كه نوشتيد كاملا متوجه شدم و با توجه به مثالي كه قرار داديد همه چيز رو گرفتم .
اگر بيان من باعث دلخوري شما شده ، پوزش ميخواهم .
با تشكر فراوان /.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.