مشاهده نسخه کامل
: کنترلهای همنام در C#
با سلام
من قبلاً VB6 کار میکردم. در VB6 شما میتونستید کنترلهای همنام داشته باشید و برای تمایزشون از خاصیتی به نام Index استفاده میشد.
من دنبال چنین چیزی در C# هستم. کسی میتونه کمکم کنه؟:11:
سلام
این چیزی که شما میفرمائید، نامش آرایه کنترلی بوده که VS دیگر ان را ساپورت نمیکند.
البته یک سری کامپونت برای افرادی که کدهایشان ار از VB6 آپدیت میکنند وجود دارد که میتوانید با فرمان RightClick->ChooseItems بر روی Toolbox آنها را به Toolbox تان اضافه کنید.
ولی پیشنهاد میکنم به این عدم پشتیبانی VS احترام بگذارید و از روش های جدید منطقی تر استفاده کنید.
مثلاً شما بفرمائید برای چه آرایه کنترلری را نیاز دارید و ذات پروژتان چگونه است، تا من اگر بلد بودم، بهترین راه جدید را پیشنهاد کنم.
سلام
این چیزی که شما میفرمائید، نامش آرایه کنترلی بوده که VS دیگر ان را ساپورت نمیکند.
البته یک سری کامپونت برای افرادی که کدهایشان ار از VB6 آپدیت میکنند وجود دارد که میتوانید با فرمان RightClick->ChooseItems بر روی Toolbox آنها را به Toolbox تان اضافه کنید.
ولی پیشنهاد میکنم به این عدم پشتیبانی VS احترام بگذارید و از روش های جدید منطقی تر استفاده کنید.
مثلاً شما بفرمائید برای چه آرایه کنترلری را نیاز دارید و ذات پروژتان چگونه است، تا من اگر بلد بودم، بهترین راه جدید را پیشنهاد کنم.
در حال نوشتن یک برنامه برای کافینت هستم. این کافینت 4 تا کامپیوتر داره. برای شروع و پایان هر کدام یک دکمه قرار دادم. برای انجام کارهای مربوط به شروع و پایان تا جایی که ممکن بود، دستورات مشترک رو درون یک تابع قرار دادم و درون هر کنترل، تابع مورد نظر را فراخوانی میکنم. مسلمه وقتی دکمه شروع رو میزنی، باید یکسری کنترلها فعال و یک سری کنترلها غیر فعال بشند. خوب اینجوری کدها خیلی زیاد میشند و ممکنه قاطی بشه. حالا برای 4 تا سیستم هیچی برای کافینتهایی که 10 تا کامپیوتر دارند باید چیکار کرد؟
اگه همون آرایه کنترلی بود، تنها یک با کد مینوشتی و با استفاده از index تمام کارها رو انجام میدادی ولی حیف .
سلام
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدمن کد h2 رو برای چند تا کنترل دیگه اجرا کردم و جواب داد فکر میکنم برای کنترل های معمول مشکل نداشته باشه مگه چیز (کنترل )خاصی باشه !؟
خیلی دور نبود
سلام
ضمن تشکر از توضیحات کاربر r.gh45، من یک متنی به شرح زیر حاضر کرده ام.
==========
اول اجازه دهید وضعیت رویدادها را در دات نت مشخص کنم.
هر کلاسسی میتواند رویدادهایی را عرضه کند و هر کدی میتواند یک روال را برای دریافت آن رویداد رجیستر کند.
تنها محدودیت که بسیار هم منطقی است، تطبیق امضای رویداد با امضای روال یا متد دریافت کننده است.
(شما که حتماً با مفهوم امضای توابع آشنا هستید، ولی برای دوستان دیگر میتوانم بگویم که امضای توابع شامل همخوانی نوع و ترتیب پارامترها ورودی است)
مثلاً شما میتوانید رویداد Click یک دکمه را با رویداد DoubleClick فرم با رویداد TextChanged یک textbox در فرم دیگر را به یک روال واحد خاص هندلر کنید.
(البته مورد آخری را مجاز به انجامش هستید ولی با اصول برنامه نویسی ساختار یافته مغایر است)
حالا با روشن شدن بحث فوق میرسیم به کد.
اگر کنترلرهای شما که منبع رویداد هستند، ثابت است و در زمان طراحی مشخص است (مثل دکمه های ده گانه یک ماشین حساب) یعنی قرار نیست در runtime اتفاقی بی افتد، میتوانید عمل هندلر کردن رویداهای مختلف کنترلرهای مختلف به یک روال واحد را توسط پنجره کمکی Properties و با سوییچ به بخش Events انجام دهید. سخت نیست تست کنید متوجه میشود.
ولی اگر این کنترلرها ثابت نیستند و مثلاً در همین برنامه شما، باید به اضای کاکنت شدن در کلاینت یک کنترلر جدید در برنامه سرور ساخته و نمایش و رویدادهایش متصل شود. طبیعتاً خودتان باید کدش را بنویسید.
در همون تاپیکی که دوست عزیزمان r.gh45 معرفی کردند، میتوانید نمونه تولید کنترلر در runtime را ببینید.
قبل از گذاشتن کد نمونه کاملتر جهت حل مشکل شما، مطلب دیگری وجود دارد که نیاز به توضیح دارد.
حالا شما توانستید تمام رویداد های مورد نظر را هم به یک جا متمرکز کنید، بحث بعدی سر این است که چگونه عامل و ارسال کنند رویداد را متوجه شوید.
مثلاً وقتی در یک ماشین حساب با 10 دکمه عددی، در یک روال کنتر رویداد مشترک از کجا بفهمید، کدام دکمه کلیک شده؟
در اینجا پارامتر اول به کمک شما می آید، پارامتری از نوع object و با نام معمولاً sender.
این پارامتر شامل اشاره گری به شی اصلی عامل رویداد است. اگر با ++C آشنایی داشته باشید، الآن متوجه شدید.
یعنی با یک cast ساده به کمک پرانتز شما میتوانید به شی اصلی که در این جا کنترلرتان است دست پیدا کنید.
البته انتخواب عمل مورد نظر با توجه به اشاره گر شی کمی پر کد و غیر منطقی است.
ولی دو راه مرسوم دارد که راه ساده تر و کم مصرف تر(!) استفاده از خصوصیت Tag کنترلرها است.
دات نت مطلقاً از این خصوصیت هیچ استفاده ای نمیکند و آن صرفاً یک متغییر در داخل کلاسس کنترلر است که در اختیار شما است.
مثلاً شما میتوانید در این خصوصیت یک index مناسب و منطقی را برای استفاده در دستور switch یا ... استفاده کنید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این دیگر یک آرایه کنترلی کامل است، ولی اگر دقت کنید، در برخی موارد میتوان کار را بدون یک مجموعه ای مثل m_Controls هم حل کرد. این نمونه جزء runtime ترین حالات است.
در آخر پیشنهاد میکنم، یک برسی روی کنترلر ListView هم انجام دهید، معمولاً بد نیست و شاید نیاز به ساخت و اضافه کردن کنترلرهای مجزا را برطرف کند.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.