PDA

View Full Version : گفتگو: اشکال در ایجاد کنترل در زمان اجرا



baidin
سه شنبه 11 فروردین 1388, 03:17 صبح
با سلام
مشکلی که من وقت صرف آن کرده ام و سایت را هم به طور کامل جستجو کرده ام به نتیجه هم نرسیده ام اشکال در ایجاد کنترل در زمان اجرا می باشد:
صورت مسئله!:
یک فرمی هست که کاربر با کلیک بر روی باتنی 2 کمبوباکس را در زمان اجرا ایجاد می کند
CombA1,CombB1
به محض ایجاد کنترل اسامی استان های کشور در کمبو باکس اول قرار می گیرد و کاربر
اسم استان های کشور را مشاهده نموده و یکی از استان ها را انتخاب نماید و به محض انتخاب استان مورد نظر کمبو باکس دومی بایستی شهرهای استان مورد نظر در آن قرار گیرد. سپس کاربر قادر است کنترل های جدیدی ایجاد نماید و ...
اشکال:
با توجه به این که تعداد کنترل هایی را که توسط کاربر ایجاد می شوند مشخص نمی باشد
CombA2,CombB2 CombA3,CombB3 , .....
به چه صورتی می توان این ارتباط را به وجود آورد که زمانی که کاربر در CombA5 اسم استان را انتخاب کرد در CombB5 اسامی شهرهای همان استان قرار گیرد و زمانی که CombA9 اسم استان را انتخاب کرد در CombB9 اسامی شهرهای آن قرار گیرد
مسئله تمام! :متفکر:

mohsen_csharp
سه شنبه 11 فروردین 1388, 09:36 صبح
کاربر گرامی شما می توانید دو تا لیست از کمبوها داشته باشی که هر دفعه می تونی به این لیست کمبوهای دیگری هم اضافه کنی.
حالا ببین اون کمبویی که توسط کاربر انتخاب شده در لیست اول اندیس چندم هست و معادل اون رو تو لیست دوم تنظیم کن.

Ali_Mor
سه شنبه 11 فروردین 1388, 09:56 صبح
چیزی که به ذهن من میرسه اینه:
هر دو کامبوباکسی که با هم مربوطند و در یک زمان ایجاد می شوند دارای مشخصه ای یکسان باشند که میتونی این مشخصه رو در پروپرتی Tag اونها نگهداری. در زمان ایجاد کامبو باکس های استان باید event مربوط به SelectedIndexChanged اون را با یک تابع هندل کنی.
هر وقت که کامبوباکس استان تغییر کرد این تابع رخ میدهد. حال باید از پارامتر sender این تابع بفمی که مقدار tag آن چیست و در کامبوهای شهر بدنبال کامبوئی بگردی که دقیقا همین Tag رو داره و ...

baidin
چهارشنبه 12 فروردین 1388, 01:44 صبح
چیزی که به ذهن من میرسه اینه:
هر دو کامبوباکسی که با هم مربوطند و در یک زمان ایجاد می شوند دارای مشخصه ای یکسان باشند که میتونی این مشخصه رو در پروپرتی Tag اونها نگهداری. در زمان ایجاد کامبو باکس های استان باید event مربوط به SelectedIndexChanged اون را با یک تابع هندل کنی.
هر وقت که کامبوباکس استان تغییر کرد این تابع رخ میدهد. حال باید از پارامتر sender این تابع بفمی که مقدار tag آن چیست و در کامبوهای شهر بدنبال کامبوئی بگردی که دقیقا همین Tag رو داره و ...



با تشکر
قبلا این روش را امتحان کرده ام اما به نتیجه ای نرسیدم.فرض کنید در هنگام تغییر انتخاب در آیتم های کمبو باکس اول تگ را هم بدست آوردیم به عنوان مثال
TagCmbA5
اما برای اینکه کمبو باکس دوم را پر کنیم احتیاج به اسم کمبو باکس دوم داریم. دقت کنید که تعداد کنترل ها مشخص نمی باشد.در صورتی که تعداد کنترل ها ثابت باشد ماندد زیر عمل می کنیم:
if tag=="TagCmbA5" then
CmbB5.items.add("city name")
....
elseif tag="tagCmbA6" then
CmbB6.items.add("city name")
....
اما تعداد کنترل های ثابت نیست. البته می توانیم تمام کمبو باکس های فرم را تگ های آنها را بررسی کنیم و در صورتیکه برابر بود از نام آن استفاده کنیم اما با توجه به این که تعداد کمبوباکس ها بسیار زیاد می باشد اصلا راه مناسبی نمیباشد

Ali_Mor
چهارشنبه 12 فروردین 1388, 09:21 صبح
در روش من باید تمام کامبوهای فرم رو بررسی کنی(همانطور که خودت گفتی) و وقتی آن را یافتیم با مقادیر مورد نظر از شهر پرش کنیم. نمی دانم چرا میگوئی باید اسمش را داشته باشیم؟؟؟
روش mohsen_csharp (http://www.barnamenevis.org/forum/member.php?u=36508)نیز جالب است، هرچند باز هم نیاز دارد برای یافتن اندیس کامبوی استان در لیست کامبوهای استان جستجو کنی که مسلما زمان کمتری صرف آن میشود. البته میتوان اندیس هر کامبو را در جائی مثل Tag ذخیره نمود تا دیگر نیاز به این جستجو هم نباشد.

mohsen_csharp
چهارشنبه 12 فروردین 1388, 09:32 صبح
می تونی تو tag کمبو به جای نام کمبو ، خود کمبو رو قرار دهی و بعد:

(tag as comboBox).Items.Add("...");

Dariuosh
چهارشنبه 12 فروردین 1388, 13:08 عصر
ببين اين به دردت ميخوره

baidin
چهارشنبه 12 فروردین 1388, 14:07 عصر
با تشکر از همه دوستان
مشکل من حل شد و ضمیمه Dariuosh دقیقا جواب سوال بود.
متشکرم

:تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: