تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 5 از 5

نام تاپيک: کنترلهای همنام در C#

  1. #1
    پروفشنال SuB's Avatar
    تاريخ عضويت
    Oct 2006
    محل سكونت
    سابستان
    پست ها
    955

    پيش فرض کنترلهای همنام در C#

    با سلام

    من قبلاً VB6 کار می‌کردم. در VB6 شما می‌تونستید کنترلهای همنام داشته باشید و برای تمایزشون از خاصیتی به نام Index استفاده می‌شد.

    من دنبال چنین چیزی در C# هستم. کسی می‌تونه کمکم کنه؟

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    این چیزی که شما میفرمائید، نامش آرایه کنترلی بوده که VS دیگر ان را ساپورت نمیکند.
    البته یک سری کامپونت برای افرادی که کدهایشان ار از VB6 آپدیت میکنند وجود دارد که میتوانید با فرمان RightClick->ChooseItems بر روی Toolbox آنها را به Toolbox تان اضافه کنید.

    ولی پیشنهاد میکنم به این عدم پشتیبانی VS احترام بگذارید و از روش های جدید منطقی تر استفاده کنید.
    مثلاً شما بفرمائید برای چه آرایه کنترلری را نیاز دارید و ذات پروژتان چگونه است، تا من اگر بلد بودم، بهترین راه جدید را پیشنهاد کنم.

  3. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است

    SuB

  4. #3
    پروفشنال SuB's Avatar
    تاريخ عضويت
    Oct 2006
    محل سكونت
    سابستان
    پست ها
    955

    پيش فرض

    سلام
    این چیزی که شما میفرمائید، نامش آرایه کنترلی بوده که VS دیگر ان را ساپورت نمیکند.
    البته یک سری کامپونت برای افرادی که کدهایشان ار از VB6 آپدیت میکنند وجود دارد که میتوانید با فرمان RightClick->ChooseItems بر روی Toolbox آنها را به Toolbox تان اضافه کنید.

    ولی پیشنهاد میکنم به این عدم پشتیبانی VS احترام بگذارید و از روش های جدید منطقی تر استفاده کنید.
    مثلاً شما بفرمائید برای چه آرایه کنترلری را نیاز دارید و ذات پروژتان چگونه است، تا من اگر بلد بودم، بهترین راه جدید را پیشنهاد کنم.
    در حال نوشتن یک برنامه برای کافی‌نت هستم. این کافی‌نت 4 تا کامپیوتر داره. برای شروع و پایان هر کدام یک دکمه قرار دادم. برای انجام کارهای مربوط به شروع و پایان تا جایی که ممکن بود، دستورات مشترک رو درون یک تابع قرار دادم و درون هر کنترل، تابع مورد نظر را فراخوانی می‌کنم. مسلمه وقتی دکمه شروع رو می‌زنی، باید یک‌سری کنترلها فعال و یک سری کنترلها غیر فعال بشند. خوب این‌جوری کدها خیلی زیاد میشند و ممکنه قاطی بشه. حالا برای 4 تا سیستم هیچی برای کافی‌نتهایی که 10 تا کامپیوتر دارند باید چی‌کار کرد؟

    اگه همون آرایه کنترلی بود، تنها یک با کد می‌نوشتی و با استفاده از index تمام کارها رو انجام میدادی ولی حیف .

  5. #4
    داره خودمونی میشه r.gh45's Avatar
    تاريخ عضويت
    Jul 2008
    پست ها
    75

    پيش فرض

    سلام
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    من کد h2 رو برای چند تا کنترل دیگه اجرا کردم و جواب داد فکر میکنم برای کنترل های معمول مشکل نداشته باشه مگه چیز (کنترل )خاصی باشه !؟
    خیلی دور نبود
    Last edited by r.gh45; 03-08-2008 at 21:31.

  6. #5
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ضمن تشکر از توضیحات کاربر r.gh45، من یک متنی به شرح زیر حاضر کرده ام.
    ==========
    اول اجازه دهید وضعیت رویدادها را در دات نت مشخص کنم.
    هر کلاسسی میتواند رویدادهایی را عرضه کند و هر کدی میتواند یک روال را برای دریافت آن رویداد رجیستر کند.
    تنها محدودیت که بسیار هم منطقی است، تطبیق امضای رویداد با امضای روال یا متد دریافت کننده است.
    (شما که حتماً با مفهوم امضای توابع آشنا هستید، ولی برای دوستان دیگر میتوانم بگویم که امضای توابع شامل همخوانی نوع و ترتیب پارامترها ورودی است)

    مثلاً شما میتوانید رویداد Click یک دکمه را با رویداد DoubleClick فرم با رویداد TextChanged یک textbox در فرم دیگر را به یک روال واحد خاص هندلر کنید.
    (البته مورد آخری را مجاز به انجامش هستید ولی با اصول برنامه نویسی ساختار یافته مغایر است)

    حالا با روشن شدن بحث فوق میرسیم به کد.
    اگر کنترلرهای شما که منبع رویداد هستند، ثابت است و در زمان طراحی مشخص است (مثل دکمه های ده گانه یک ماشین حساب) یعنی قرار نیست در runtime اتفاقی بی افتد، میتوانید عمل هندلر کردن رویداهای مختلف کنترلرهای مختلف به یک روال واحد را توسط پنجره کمکی Properties و با سوییچ به بخش Events انجام دهید. سخت نیست تست کنید متوجه میشود.

    ولی اگر این کنترلرها ثابت نیستند و مثلاً در همین برنامه شما، باید به اضای کاکنت شدن در کلاینت یک کنترلر جدید در برنامه سرور ساخته و نمایش و رویدادهایش متصل شود. طبیعتاً خودتان باید کدش را بنویسید.

    در همون تاپیکی که دوست عزیزمان r.gh45 معرفی کردند، میتوانید نمونه تولید کنترلر در runtime را ببینید.

    قبل از گذاشتن کد نمونه کاملتر جهت حل مشکل شما، مطلب دیگری وجود دارد که نیاز به توضیح دارد.

    حالا شما توانستید تمام رویداد های مورد نظر را هم به یک جا متمرکز کنید، بحث بعدی سر این است که چگونه عامل و ارسال کنند رویداد را متوجه شوید.
    مثلاً وقتی در یک ماشین حساب با 10 دکمه عددی، در یک روال کنتر رویداد مشترک از کجا بفهمید، کدام دکمه کلیک شده؟

    در اینجا پارامتر اول به کمک شما می آید، پارامتری از نوع object و با نام معمولاً sender.
    این پارامتر شامل اشاره گری به شی اصلی عامل رویداد است. اگر با ++C آشنایی داشته باشید، الآن متوجه شدید.
    یعنی با یک cast ساده به کمک پرانتز شما میتوانید به شی اصلی که در این جا کنترلرتان است دست پیدا کنید.

    البته انتخواب عمل مورد نظر با توجه به اشاره گر شی کمی پر کد و غیر منطقی است.
    ولی دو راه مرسوم دارد که راه ساده تر و کم مصرف تر(!) استفاده از خصوصیت Tag کنترلرها است.
    دات نت مطلقاً از این خصوصیت هیچ استفاده ای نمیکند و آن صرفاً یک متغییر در داخل کلاسس کنترلر است که در اختیار شما است.

    مثلاً شما میتوانید در این خصوصیت یک index مناسب و منطقی را برای استفاده در دستور switch یا ... استفاده کنید.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این دیگر یک آرایه کنترلی کامل است، ولی اگر دقت کنید، در برخی موارد میتوان کار را بدون یک مجموعه ای مثل m_Controls هم حل کرد. این نمونه جزء runtime ترین حالات است.

    در آخر پیشنهاد میکنم، یک برسی روی کنترلر ListView هم انجام دهید، معمولاً بد نیست و شاید نیاز به ساخت و اضافه کردن کنترلرهای مجزا را برطرف کند.
    Last edited by _H2_; 03-08-2008 at 22:20.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •