نمایش نتایج 1 تا 15 از 15

نام تاپیک: override توابع کنترل ها

  1. #1

    override توابع کنترل ها

    با سلام
    خواستم بدونم میشه توابع نوشته شده و استاندارد یک کنترل (کامپوننت) رو override کنم
    مثلا وقتی یه کلاس تعریف میکنم به راحتی میشه تابع ToStringش رو override کرد اما تا حالا نتونستم تابع toString یه text Box رو override کنم

    تقریبا میشه گفت میخوام سورس ها رو تغییر بدم. درسته برنامه open source نیست ولی یه امید هایی دارم
    اگه کسی مطمئنه نمیشه بگه تا یه راه دیگه پیدا کنم

  2. #2

    نقل قول: override توابع کنترل ها

    سلام

    من برای button رو نوشتم شد (فرقی نداره )

    یه کلاس درست کن از textbox ارسش ببر بعد override کن بعد حالشو ببر

    اینم یه مثال


    public class MyTextBox :TextBox
    {
    override String ToString()
    {
    // do what you want here.

    }
    }
    آخرین ویرایش به وسیله r00tkit : چهارشنبه 21 مهر 1389 در 20:29 عصر
    Kernel Mode Developer
    RootKitSMM@Yahoo.com

  3. #3

    نقل قول: override توابع کنترل ها

    ممنون
    ولی منظور من چیزی دیگست (اینوکه میدونستم)
    من میخوام تابع textBox1.Text.ToString() رو اوور لود کنم نه toString خود کلاس (کنترل) رو
    میتونی کمکم کنی؟؟

  4. #4

    نقل قول: override توابع کنترل ها

    سلام

    دوست من

    textBox1.Text.ToString()

    با

    "hello".ToString()

    فرقی نداره چون از طرق
    getter متعلق به text یه رشته برگشته و دیگه ان ربطی به کلاس textbox نداره شما می تونی پراپرتی text رو override کنی
    و بگی به جای اینکه string برگردونه یه mysrting رو برگردنه

    اگه با reflector به ساختار text نگاه کنی موضوع شفاف تر می شه

    چیزی که از text برمی گرده یه متغییر محلی هستش به نام string str = null;
    Kernel Mode Developer
    RootKitSMM@Yahoo.com

  5. #5

    نقل قول: override توابع کنترل ها

    ببین این کلاس منه
        class txtBox:System.Windows.Forms.TextBox
    {
    public override string Text
    {
    get
    {
    return base.Text;
    }
    set
    {
    base.Text = value;
    }
    }
    public override string ToString()
    {
    return " ACU281. ";
    //return base.ToString();
    }
    }

    بعد تو رویداد کلیک دکمم مینویسم
    label1.Text=tb.Text.ToString()

    tb یه شئ از کلاسمه که با control.add به فرمم اضافه شده
    الان لیبل من مقدارش "ACU281." نمیشه
    واسه این که بشه باید بنویسم
    label1.Text=tb.ToString()

    ذهنیت من اینه که هر ساختار و ... یه متد ToString داره
    نکنه این ذهنیتی که دارم اشتباهه؟؟

  6. #6
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    آستارا-تهران
    پست
    357

    نقل قول: override توابع کنترل ها

    نقل قول نوشته شده توسط ahmad-hagh مشاهده تاپیک
    ببین این کلاس منه

        class txtBox:System.Windows.Forms.TextBox



    {
    public override string Text
    {
    get
    {
    return base.Text;
    }
    set
    {
    base.Text = value;
    }
    }
    public override string ToString()
    {
    return " ACU281. ";
    //return base.ToString();
    }

    }


    بعد تو رویداد کلیک دکمم مینویسم
    label1.Text=tb.Text.ToString()

    tb یه شئ از کلاسمه که با control.add به فرمم اضافه شده
    الان لیبل من مقدارش "ACU281." نمیشه
    واسه این که بشه باید بنویسم
    label1.Text=tb.ToString()

    ذهنیت من اینه که هر ساختار و ... یه متد ToString داره
    نکنه این ذهنیتی که دارم اشتباهه؟؟


    دوست عزیز شما با کدی که نوشتی متد toString رو override کردی
    نتیجه اش هم همونه که آخرش نوشتی
    شما که متد toString کلاس string رو override نکردی که بخوای بنویسی tb.Text.ToString()
    البته امکان پذیر نیست که متد toString رو برای کلاس string ، override کنی چون کلاس string به صورت selead تعریف شده و نمی شه ازش ارث بری کرد


  7. #7

    نقل قول: override توابع کنترل ها

    سلام دوست عزیز!
    اول ببینیم override کردن یعنی چی؟ (البته میدونم بلدید، سوء تفاهم نشه، میخوام یه منطقی رو در پیش بگیرم تا به یه نتیجه ای برسیم) یعنی اینکه من یه کلاس والد دارم، یه متد داره مثلا به اسم ToString، حالا یه کلاس دیگه دارم، که از کلاس اولم ارث برده، طبیعتا همه اعضا(متد ها، فیلدهای غیر خصوصی، خصوصیات) رو هم ازش ارث برده و حالا داره، اما همون مثالی که زدیم، یعنی متد ToString توی کلاس جدید رفتارش با اونچه که مد نظر من هستش فرق داره، بنابراین میام توی کلاس جدیدم این متد رو بازنویسی یا همون override میکنم و ازش میخوام اونطور که من میخوام رفتار کنه، نه اونطوریکه والدش بهش منتقل کرده؛ پس override کردن یه رفتار وقتی معنی داره که توارثی وجود داشته باشه؛
    این که میفرمایید که وقتی کلاس جدیدی تعریف میکنید، میتونید متد ToString اش رو بازنویسی کنید، هم موید این مطلبه، چون این متد متعلق به کلاس Object هستش، که همه کلاس های دیگه مستقیم یا غیر مستقیم ازش ارث میبرن، پس همه کلاس ها هم میتونن اونو بازنویسی کنن؛
    خوب حالا شما وقتی از یه کلاس مثلا به اسم TextBox ارث نمیبری، چطور میخوای متدهاشو بازنویسی کنی؟ چون شما اصلا متدهاشو نداری، مال شما نیست، شما فقط میتونی متدهاشو رو فراخونی کنی، یا اینکه اگه بخوام خیلی شیئ گرایانه بگم میشه: شما فقط میتونی از این شیئ (مثلا نمونه TextBox ای که ساختی و داری ازش استفاده میکنی) درخواست کنی که فلان رفتار خاص رو (مثلا رفتار ToString) از خودش به نمایش بذاره. فکر میکنم در مورد شیئ گرایی مخصوصا تعریف شیئ، ایجاد و نمونه سازی از شیئ، و استفاده از شیئ، بیشتر مطالعه کنی، این ابهام برات برطرف میشه.
    اما در مورد تغییر سورس ها، خدمتتون عرض کنم که کد دات نت بسته نیست و شما قسمت های خیلی زیادی از دات نت رو میتونی تو سایت میکروسافت پیدا کنی، البته سورس منتشر شده آموزشیه و با نمونه تجاریش فرق هایی هم داره، اما هم اینکه بابت آموزش واقعا عالیه، و هم اینکه تو هر بسته ای که منتشر شده، معمولا تفاوت های نسخه آموزشی که شما داری دانلود میکنی و نسخه تجاری ذکر شده و اگر هم نباشه تو وبلاگ اعضای تیم دات نت میتونی مقاله هایی رو که راجع به تفاوت های مورد نظر هست، پیدا کنی.
    از طرف دیگه برای بخش های منتشر نشده (چون میکروسافت داره به تدریج اینکارو انجام میده) هم میتونی از Reflector استفاده کنی که عین کد رو از اسمبلی بهت بر می گردونه (آدرس دانلودش یادم نیست، تو گوگل جستجو کن)، حالا شما میتونی مثلا برای تغییر رفتارهای TextBox خودت یه کلاس تعریف کنی (مثلا MyTextBox) و کد تغییر داده شده ی TextBox رو توش بنویسی، اونجاهایی هم که ثابته که خوب همون رفتارو داره و میتونی از جادوی Copy & Paste استفاده کنی، هم به منظورت میرسی و هم آموزش خیلی خوبیه.
    در رابطه با اضافه کردن یه سری رفتارها هم به اشیاء از پیش تعریف شده، بدون تغییر در سورسشون، میتونی از Extension ها استفاده کنی، فکر کنم تو همین فوروم بچرخی چیزایی در مورد اکستنشن ها گیرت میاد؛ اگه چیزی نبود، بگو تا برات توضیح بدم.
    امیدوارم مطالب به دردت خورده باشه.
    پیروز و پاینده باشی.

  8. #8

    نقل قول: override توابع کنترل ها

    hi
    sorry
    alt+shift dont work cuz i'm in ubuntu

    my friend ROTOR is implementation of CLI it differ from .NET and

    when we see ROTOR code actualy we see how CLR and etc are coded it's not same what we see in reflector
    reflector show manage code
    Kernel Mode Developer
    RootKitSMM@Yahoo.com

  9. #9

    نقل قول: override توابع کنترل ها

    alt+shift dont work cuz i'm in ubuntu
    سلام دوست عزیز، خوب چرا فارسی رو فعال نمیکنی تو اوبونتو؟ از تو تنظیمات داره، alt+shift ش هم دقیقا کار میکنه، فقط الان دقیق یادم نیست از کدوم قسمت، برو تو فوروم فارسی اوبونتو، اونجا راهنماییش هست:
    http://ubuntu.ir
    والله من دقیقا نگرفتم چی گفتی؟؟؟
    حداقل فینگلیش بنویس.

  10. #10

    نقل قول: override توابع کنترل ها

    ممنونم آق جواد

    خوب حالا شما وقتی از یه کلاس مثلا به اسم TextBox ارث نمیبری
    یه نگاه به کدم بنداز میفهمی که من از تکست باکس ارث بردم . ببین
    class txtBox:System.Windows.Forms.TextBox
    خلاصه ممنون از همتون
    دیشب تقریبا به هدفی که میخواستم رسیدم
    منظور geek رو هم فهمیدم.یه سرچ بزن متوجه میشی
    احساس میکنم Extension ها چیزای جالبی باشن.باس برم سراغش (ممنون از راهنماییت)
    بدرووووود

  11. #11

    نقل قول: override توابع کنترل ها

    نقل قول نوشته شده توسط Javad_Darvish_Amiry مشاهده تاپیک
    سلام دوست عزیز، خوب چرا فارسی رو فعال نمیکنی تو اوبونتو؟ از تو تنظیمات داره، alt+shift ش هم دقیقا کار میکنه، فقط الان دقیق یادم نیست از کدوم قسمت، برو تو فوروم فارسی اوبونتو، اونجا راهنماییش هست:
    http://ubuntu.ir

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

    برادر می گم سورس Rotor فرق داره با سورسی که reflector نشون می ده

    نمی دونم چی جوری این هارو به هم ربط دادی

    اگه نمی دونی ROTOR چیه: just****inggoogleit.com
    Kernel Mode Developer
    RootKitSMM@Yahoo.com

  12. #12
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    آستارا-تهران
    پست
    357

    نقل قول: override توابع کنترل ها

    حالا شما میتونی مثلا برای تغییر رفتارهای TextBox خودت یه کلاس تعریف کنی (مثلا MyTextBox) و کد تغییر داده شده ی TextBox رو توش بنویسی، اونجاهایی هم که ثابته که خوب همون رفتارو داره و میتونی از جادوی Copy & Paste استفاده کنی، هم به منظورت میرسی و هم آموزش خیلی خوبیه
    معمولا نمی شه این کارو کرد یعنی بیایم کل سورس یه تکست باکس رو با رفلکتور بازش کنیم و کپی پیست کنیم تو پروژمون و یه تکست باکس خودمونو بسازیم
    چون معمولا کنترل هایی مثل تکست باکس از کلاس هایی در دات نت فریم ورک استفاده می کنند که به صورت اینترنال تعریف شده اند و اگه کد کپی پیست شده رو کامپایل کنی ارور میده !!!

  13. #13

    نقل قول: override توابع کنترل ها

    نقل قول نوشته شده توسط geek1982 مشاهده تاپیک
    سلام

    من برای button رو نوشتم شد (فرقی نداره )

    یه کلاس درست کن از textbox ارسش ببر بعد override کن بعد حالشو ببر

    اینم یه مثال


    public class MyTextBox :TextBox
    {
    override String ToString()
    {
    // do what you want here.

    }
    }
    نقل قول نوشته شده توسط ahmad-hagh مشاهده تاپیک
    ممنون
    ولی منظور من چیزی دیگست (اینوکه میدونستم)
    من میخوام تابع textBox1.Text.ToString() رو اوور لود کنم نه toString خود کلاس (کنترل) رو
    میتونی کمکم کنی؟؟
    نقل قول نوشته شده توسط ahmad-hagh مشاهده تاپیک
    ممنونم آق جواد


    یه نگاه به کدم بنداز میفهمی که من از تکست باکس ارث بردم . ببین
    class txtBox:System.Windows.Forms.TextBox
    خلاصه ممنون از همتون
    دیشب تقریبا به هدفی که میخواستم رسیدم
    منظور geek رو هم فهمیدم.یه سرچ بزن متوجه میشی
    احساس میکنم Extension ها چیزای جالبی باشن.باس برم سراغش (ممنون از راهنماییت)
    بدرووووود
    اول اینکه بنده آق جواد نیستم، البته شما لطف دارین، ولی من کوچیکتر از این حرفهام؛ دوم اینکه خودتون مرور کنید مطالب رو ببینید بالاخره اون آدم بالا خودش اینو میدونست یا چی یا نه یا بالاخره؟؟؟ سوم اینکه چی رو سرچ بزنم متوجه میشم؟؟؟
    البته عذرخواهی میکنم که اینقدر صریح گفتم.
    پاینده باشید.

  14. #14

    نقل قول: override توابع کنترل ها

    برادر می گم سورس Rotor فرق داره با سورسی که reflector نشون می ده
    نمی دونم چی جوری این هارو به هم ربط دادی
    سلام، نه من نمیدونم ROTOR چیه و تا حالا باهاش برخورد نکردم؛ اما متوجه سوال شما هم که فرمودید چی جوری این ها رو به هم ربط دادم نشدم، چی ها رو به هم ربط دادم؟ اگه منظورت اینه که چی جوری اینا رو به هم ربط میدم (یعنی تفاوت بین دو کد رو)، خوب عرض کردم که ROTOR نمیدونم چیه، اما اگه به اساس کار Reflector نگاه کنیم، متوجه میشیم که با یه درصد بالایی از اطمینان اصل کد منبع رو بهمون بر میگردونه، میگم درصد بالای اطمینان، چون رفلکتور از IL برای برگردوندن کد استفاده میکنه و IL شامل تغییراتی که کامپایلر به کد اعمال کرده هم میشه. که البته این جا هم با attribute هایی که به کد اضافه میشه باز میشه تا یه درصد بالایی حدس زد که کد چی بوده.
    در ضمن اینکه کدی که رفلکتور بر میگردونه کاملا قابل اجرا است:::
    معمولا نمی شه این کارو کرد یعنی بیایم کل سورس یه تکست باکس رو با رفلکتور بازش کنیم و کپی پیست کنیم تو پروژمون و یه تکست باکس خودمونو بسازیم
    چون معمولا کنترل هایی مثل تکست باکس از کلاس هایی در دات نت فریم ورک استفاده می کنند که به صورت اینترنال تعریف شده اند و اگه کد کپی پیست شده رو کامپایل کنی ارور میده !!!
    که البته این کار ریزه کاری ها و گاهی هم هوشیاری های خاص خودش رو میخواد، کلاس های اینترنال هم هستن، گاهی هم تشخیص تغیییر اعمال شده سخته و یه متغیر یا یه پراپرتی جا میمونه؛
    ولی در هر صورت همون IL هستش که داره کار میکنه.
    فقط بابت مثال برای یک رویداد اتفاق زیر می افته:
    کد اولیه مثلا می تونه این باشه:

    public event EventHandler CurrentChanged;

    اما کدی که رفلکتور معمولا تولید می کنه (البته به خاطر کدی که کامپایلر تولید میکنه، و اینجا هم باید با امکانات زبان و تغییراتی که موقع کامپایل روش اعمال میشه آشنایی داشت) چنین چیزی میتونه باشه:

    private EventHandler m_CurrentChanged;
    public event EventHandler CurrentChanged {
    add {
    this.m_CurrentChanged= (EventHandler)Delegate.Combine(this.m_CurrentChang ed, value);
    }
    remove {
    this.m_CurrentChanged= (EventHandler)Delegate.Remove(this.m_CurrentChange d, value);
    }
    }

    و چنین تغییراتی معمولا زیاد انجام میشه، مثل پراپرتی های اتوماتیک و حتی خود پراپرتی های سنتی و متد های getter و setter که براشون تولید میشه.
    زیاد حرف زدم، ببخشید. پاینده و پیروز باشید.
    (راستی اگه ممکنه یه لینک در مورد ROTOR برام بفرست. نظرم رو جلب کرد، باید جالب باشه؛ ممنونم.)

  15. #15

    نقل قول: override توابع کنترل ها

    اول اینکه بنده آق جواد نیستم، البته شما لطف دارین، ولی من کوچیکتر از این حرفهام؛ دوم اینکه خودتون مرور کنید مطالب رو ببینید بالاخره اون آدم بالا خودش اینو میدونست یا چی یا نه یا بالاخره؟؟؟ سوم اینکه چی رو سرچ بزنم متوجه میشم؟؟؟
    خوب نمیدونستم چی صدات کنم واسه همین اول یوزرت رو آوردم
    قسمت های قبل علامت سوال رو قاط زدم-نمیفهمم چی میگی
    و اما سرچ در مورد
    when we see ROTOR code actualy we see how CLR and etc are coded it's not same what we see in reflector
    reflector show manage code
    بود-
    گفتم در مورد ROTOR سرچ کنی منظور geek رو میفهمی هرچند با ترجمه همین نقل قول بالایی هم میشه تفاوتش رو فهمید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •