PDA

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



xxxsenatorxxx
سه شنبه 31 تیر 1393, 08:18 صبح
سلام و خسته نباشید
با یک مثال سوالمو توضیح میدم

مثلا 100 تا چک باکس داریم و یک دیتا گریدویو 100 ستونه و کد زیرو
if (checkBox1.Checked)
{
dataGridView1.Columns[1].Visible = false;
}
میخوام هر کدوم از 100 چک باکس تیک خورد ستون مربوط به اون چک باکس نمایش داده نشه.

آیا راهی هست که بشه با یه for یا چیزه مشابه به جای عدد 1 متغیر مثلا i گذاشت ( checkBox+ i +.Checked) یا یه همچین چیزی که از نوشتن 100 خط یا بیشتر جلوگیری کرد یا اصلا اساتید راه بهتری سراغ دارن برای این جور موارد؟؟؟

یه همچین چیزی پیدا کردم ولی نمیتونه اسم کنترل هارو تشخیص بده و با همه یه جور برخورد میکنه
Action<Control.ControlCollection> func = null;
func = (controls) =>
{
foreach (Control control in controls)
{
if (control is CheckBox)
{
{

تشکر

Davidd
سه شنبه 31 تیر 1393, 08:33 صبح
آره راه داره.
event checkedChanged تمام checkBox هارو به يك متد وصل كن. براي اينكار ميتوني رو يكي از checkBox دابل كليك كني تا يه متد بسازه. بعد تمام chckBox هارو انتخاب كن و از قسمت eventها، براي event checkedChanged اين متدي كه ساخته شده انتخاب كن.
حالا داخل اين متد از روي شي sender ميتوني بفهمي كدوم checkBox تيك خورده (يا تيكش برداشته شده) به اين صورت CheckBox chbx=sender as CheckBox
حالا از روي Name اين chbx ميتوني بفهمي شمارش چيه و اگه تيك خورده بود ستون مربوطه نشون داده بشه و اگه تيكش برداشته شده برعكس.

xxxsenatorxxx
سه شنبه 31 تیر 1393, 08:41 صبح
آره راه داره.
event checkedChanged تمام checkBox هارو به يك متد وصل كن. براي اينكار ميتوني رو يكي از checkBox دابل كليك كني تا يه متد بسازه. بعد تمام chckBox هارو انتخاب كن و از قسمت eventها، براي event checkedChanged اين متدي كه ساخته شده انتخاب كن.
حالا داخل اين متد از روي شي sender ميتوني بفهمي كدوم checkBox تيك خورده (يا تيكش برداشته شده) به اين صورت CheckBox chbx=sender as CheckBox
حالا از روي Name اين chbx ميتوني بفهمي شمارش چيه و اگه تيك خورده بود ستون مربوطه نشون داده بشه و اگه تيكش برداشته شده برعكس.

راستش زیاد متوجه نشدم میشه کد قسمت متد را بزارید

***************
2- در ضمن یه همچین چیزی (checkBox+ i +.Checked)یا (textbox[i].text) یا موارد مشابه اصلا نمیشه ؟؟؟ (مهم)

Davidd
سه شنبه 31 تیر 1393, 09:02 صبح
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
CheckBox chbx = sender as CheckBox;
int num = Convert.ToInt32(chbx.Name.Substring(8));
dataGridView1.Columns[num].Visible = chbx.Checked;
}

همانطوركه گفتم بايد رويداد CheckedCHanged تمام checkBox ها به اين متد وصل باشه