PDA

View Full Version : دسترسی به کنترل های اضافه شده بصورت دینامیک



h_assefi
شنبه 07 اردیبهشت 1392, 14:18 عصر
سلام دوستان
من داخل یک فرم که طراحی کردم یکسری کنترل هایی به صورت دینامیک بوجود آوردم اما نمیتونم از طریق لسمشون بهشون دسترسی داشته باشم تا بتونم شرط هایی که می خوام را اعمال کنم
کنترل ها :
CheckBox , TextBox
لطفا کمک کنید

h_assefi
شنبه 07 اردیبهشت 1392, 15:30 عصر
کسی بلد نیست ؟:متفکر:

h_assefi
شنبه 07 اردیبهشت 1392, 16:08 عصر
اگه کسی بلده لطفا راهنمایی کنه

tooraj_azizi_1035
شنبه 07 اردیبهشت 1392, 16:16 عصر
Put your code

sobhmoud
شنبه 07 اردیبهشت 1392, 16:41 عصر
منظورت از شرطهات چیه و چی کار می خوای بکنی اگه می خوای یه event بذاری براش که از کد زیر استفاده کن
مثلا برای چک باکس ها تو لود فرمت اینجوری بنویس:
checkBox1.CheckedChanged+=new EventHandler(checkBox1_CheckedChanged);
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
//محل کدهای شما
}

که به جای checkBox1 اسم کنترلت رو می ذاری و برای راحتی بعد =+ یک بار tab بزنی همه کارش انجام می شه
اگر هم نه که باید بیشتر توضیح بدی

h_assefi
یک شنبه 08 اردیبهشت 1392, 09:23 صبح
سلام مجدد
ممنون از اینکه جواب دادید
من تا الان کنترل هاای دینامیکی که می خواستم را ساختم و میدونمم که چطور یک Event براش بنویسم.
من یک دکمه روی صفحه بصرت دستی میذارم و بعدش از طریق کد کنترلهای دینامیکی که می خوام را میسازم .(شامل TextBox,CheckBox) که تعدادشون محدودیت نداره و هر بار میتونه تغییر کنه
به هر کدومشون اسم اختصاص دادم و حالا میخوام از طریق این اسم ها شرط ی را چک کنم. به عنوان مثال :

If (Textbox1.text != Nothing ) and if (checkbox1.checked =false )
{
//Do something
}

و نکته اینجاست که این CheckBox و TextBox هر دوشون بصورت دینامیک ساخته میشند
و من چیزی که میخوام طرز دسترسی به کنترل های دینامیک هستش
ممنون میشم کمکم کنید

mousa1992
یک شنبه 08 اردیبهشت 1392, 12:27 عصر
سلام
از طریق کد زیر کنترل های ساخته شده رو پیدا میکنید و بعد هر شرطی رو که خواستید اعمال می کنید


foreach (Control control in this.Controls)
{
if (control is CheckBox && control.Name == "checkbox1")
{
// ....
// this refers to form class
}
}


موفق باشید

h_assefi
یک شنبه 08 اردیبهشت 1392, 12:49 عصر
ممنون که راهنمایی می کنید
اما من با این دستور فقط به یکی از کنترلها دسترسی پیدا می کنم و برای دسترسی همزمان به 2 کنترل مناسب نیست
اگه میشه راهنمایی کنید تا به هر 2 کنترل دسترسی پیدا کنم
ممنون

mousa1992
یک شنبه 08 اردیبهشت 1392, 13:11 عصر
خب میتونی بعد از پیدا کردن textBox و بررسی شرط ( اگر برقرار بود ) ی حلقه ی دیگه داشته باشی که سرچ کنه و checkbox مورد نظرو پیدا کنه و شرط مورد نظرو بررسی کنی

tooraj_azizi_1035
یک شنبه 08 اردیبهشت 1392, 13:17 عصر
if ((this.Controls["CheckBox1"] as CheckBox).Checked)

h_assefi
یک شنبه 08 اردیبهشت 1392, 13:28 عصر
خب میتونی بعد از پیدا کردن textBox و بررسی شرط ( اگر برقرار بود ) ی حلقه ی دیگه داشته باشی که سرچ کنه و checkbox مورد نظرو پیدا کنه و شرط مورد نظرو بررسی کنی

توی میزان زیاد بودن کنترل ها با افت سرعت مواجه نمی شیم ؟

mousa1992
یک شنبه 08 اردیبهشت 1392, 13:46 عصر
نه افت سرعت نخواهید داشت

از روشی که دوستمون tooraj_azizi_1035 (http://barnamenevis.org/member.php?41757-tooraj_azizi_1035) قرار دادن استفاده کنید

h_assefi
یک شنبه 08 اردیبهشت 1392, 13:59 عصر
من از همون روشی که دوستمون گفت استفاده می کنم اما اروره
Object Reference not set to an instance of an object
میده
به دنبای رفع مشکل هستم ...

tooraj_azizi_1035
یک شنبه 08 اردیبهشت 1392, 14:18 عصر
اسم CheckBox1 رو به اسمی که وجود داره تغییر بدید.

h_assefi
یک شنبه 08 اردیبهشت 1392, 14:33 عصر
مشکل از این نیست. چون قبلا تغییرش دادم

h_assefi
یک شنبه 08 اردیبهشت 1392, 14:57 عصر
یافتم :کف:
مرسی از دوستان عزیزی که الهام بخش بودند تا من بتونم مشکل را حل کنم :لبخند:
من چون از Panel استفاده کرده بودم باید خود Panelهم بکار می بردم به همین خاطر یکمی پیچیده بود اما با کمک دوستان حل شد
اینم مدل دستور شرطی که من به دنبالش بودم

if (((KryptonCheckBox)(this.TabControlGroups.TabPages (0).Controls("FLPanel0") as FlowLayoutPanel).Controls("check1")).Checked == true & ((KryptonTextBox)(this.TabControlGroups.TabPages(0 ).Controls("FLPanel0") as FlowLayoutPanel).Controls("TXT1")).Text == null) {
MessageBox.Show("Wrong");
}




:تشویق: :تشویق: :تشویق: :تشویق: :لبخند: :لبخند: :لبخند: :لبخند:

hamid_hr
یک شنبه 08 اردیبهشت 1392, 15:33 عصر
this.controls.find("cbox1",true);

h_assefi
یک شنبه 08 اردیبهشت 1392, 16:04 عصر
دوست عزیز این جزء اولین روش هایی بود که من امتحان کردم
اما به درد کار یکه من می خواستم بکنم نمی خورد.
ولی بازم ممنون