PDA

View Full Version : مشکل با ComboBox



Mehrdad12011
پنج شنبه 13 شهریور 1393, 00:06 صبح
سلام بر دوستان

من داخل یک فرم 10 تا ComboBox گذاشتم و همه را با یک آرایه مقداردهی کردم. موقع اجرای برنامه، وقتی مقدار هر کدام از کمبوها را تغییر میدم، بقیه کمبوها با هم عوض میشن و مقدار انتخاب شده توی همه قرار میگیره. مشکل از کجاست و باید چکار کنم؟

متشکرم

feryt20
پنج شنبه 13 شهریور 1393, 00:19 صبح
کدتونو بذارید تا بررسی کنن دوستان مشکلش کجاس

aminmousavi
پنج شنبه 13 شهریور 1393, 00:21 صبح
به دلیل این هست همشون از یک دیتاسورس دارن استفاده میکنن ، همین باعث میشه همشون به هم لینک بشن

Mehrdad12011
پنج شنبه 13 شهریور 1393, 14:52 عصر
با تشکر از شما دوستان

به دلیل این هست همشون از یک دیتاسورس دارن استفاده میکنن ، همین باعث میشه همشون به هم لینک بشن
بله دقیقا مشکل همینه. یعنی اگر آرایه های مختلفی (ولو با مقادیر مثل هم) به کمبوها اختصاص بدم، مشکلی پیش نمیاد، ولی وقتی یک آرایه را به همه کمبوها نسبت میدم، این مشکل پیدا میشه.



کدتونو بذارید تا بررسی کنن دوستان مشکلش کجاس
کد خاص و پیچیده ای نداره. در ادامه کدها را میگذارم، دوستان راهنمایی کنند.

اول داخل یک حلقه آرایه ای از کمبوها با کدنویسی ایجاد کردم و dt2 که DataTable موردنظرم بود را به همه کمبوها اختصاص دادم:




for (int i = 0; i < 10; i++)
{
cmbArray[i] = new ComboBox();
cmbArray[i].Name = "cmbStuffName" + i.ToString();
grpInvoiceItems.Controls.Add(cmbArray[i]);
cmbArray[i].Click += new System.EventHandler(this.cmbArray_Click);
cmbArray[i].DataSource = dt2;
cmbArray[i].DisplayMember = "StuffName";
}


بعد که دیدم مشکل داره، فکر کردم مشکل از آرایه کمبوهاست. برای آزمایش آمدم بدون کدنویسی دوتا کمبوی جداگانه و با نامهای متفاوت از داخل Toolbox روی فرم گذاشتم و dt2 را بهشون نسبت دادم. دیدم مشکل هنوز هم هست.
گفتم شاید مشکل از dt2 باشه. محتویات dt2 را داخل یک آرایه گذاشتم و آرایه را به دو تا کمبو اختصاص دادم، باز هم فرقی نکرد. بعد محتویات dt2 را داخل دو تا آرایه گذاشتم و هر آرایه را به یکی از کمبوها نسبت دادم، درست شد.
با توجه به اینکه 10تا کمبو لازم دارم، اگر محتویات dt2 را داخل 10تا آرایه بگذارم و هر آرایه را به یکی از کمبوها اختصاص بدم، مشکلم حل میشه. ولی مطمئنا به شکل ساده تری هم باید بشه مشکل را حل کرد.
لطفا به من کمک کنید.

aminmousavi
پنج شنبه 13 شهریور 1393, 15:35 عصر
دوست عزیز کافیه فقط کد

cmbArray[i].DataSource = dt2;

رو به

cmbArray[i].DataSource = dt2.Copy();


تغییر بدی ، موفق باشی

Mehrdad12011
جمعه 14 شهریور 1393, 05:58 صبح
بله درسته. آزمایش کردم، این دستور مشکلم را حل کرد.
خیلی متشکرم

در همین برنامه یک مشکل دیگه هم دارم که اگر ممکنه لطف کنید و جواب اون را هم بدین:

قبلا که من با vb6 برنامه می‌نوشتم، وقتی آرایه ای از اشیا را در محیط طراحی (بدن کدنویسی) ایجاد میکردم، در رویدادهای مربوط به اون آرایه یک پارامتر i وجود داشت که با اون می‌شد فهمید که این رویداد برای کدام شی عضو آرایه اتفاق افتاده. مثلا اگر آرایه ای از 10 تا کلید Command داشتیم و کاربر روی کلید 3 کلیک میکرد، در رویداد Command_Click پارامتر i برابر با 3 میشد و برنامه نویس می تونست با یک Select Case برای هرکدام از کلیدها، کد لازم را اجرا کنه.

حالا که در C# مفهوم اشیا آرایه ای به اون شکل وجود نداره و با کد نویسی باید آرایه ای از اشیا را ایجاد کرد، تکلیف اون پارامتر i چیه و چطور میشه فهمید که رویداد برای کدام شی عضو آرایه رخ داده؟

ضمن اینکه لطفا توضیح بدین که وقتی یک شی با کد نویسی ایجاد میشه، رویدادهای اون به چه شکل به وجود میان؟

aminmousavi
جمعه 14 شهریور 1393, 20:16 عصر
برای فهمیدن اندکس میتونین اندکس رو موقع ایجاد توی name کنترل قرار بدید و در اونت مورد نظر اندکسش رو استخراج کنین :


for (int i = 0; i < 10; i++)
{
ComboBox com = new ComboBox();
com.Name = "combo" + i.ToString();
com.Location = new Point(0, 25 * i);
com.DataSource = dt.Copy();
com.DisplayMember = "name";
com.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);
this.Controls.Add(com);
}


خود اونت

private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(((ComboBox)sender).Name.Replace("combo", ""));
}