دسترسی به کنترل های فرم با حلقه for
سلام دوستان
من یه فرم دارم که توش حدود 30 تا , checkbox وجود داره حالا می خوام با یه حلقه for به اینا دسترسی داشته باشم تا بتونم مقدار شو تغییر بدم میشه بگید چجوری میشه این کار رو انجام داد
من با خاصیت controls از form این کار رو می خواستم انجام بدم ولی پیغام خطا داد که مشخص می شد هیچی تو این خاصیت وجود نداره کد تقریبا بصورت زیر بود
form1.controls[i].text="xxxxx"
نقل قول: دسترسی به کنترل های فرم با حلقه for
دوست عزيز اولا بايد نوع كنترلتون رو مشخص كنيد دوم هم اين روش شما محدود هست براي بهينه تر كردن و زيبا سازي درخواست شما ميتونيد از حلقه foreach استفاده كنيد البته اگه سايت رو بگرديد نمونه هايي رو پيدا ميكنيد اگه بازم مشكلتون حل نشد براتون با سورس كد توضيح مي دم فقط ببخشيد چون وقت نكردم سورس بزارم
اگه باز مشكل داشتين بفرماييد با سورس توضيح ميدم
نقل قول: دسترسی به کنترل های فرم با حلقه for
این مثال برای تغییر متن تمامی textbox های روی فرم نوشته شده . برای بقیه کنترل ها یا کارهای پیچیده تر از خلاقیت خودت استفاده کن . ضمنا موضوع تکراریه و با سرچ میتونستی جواب های خیلی بهتری پیدا کنی . من این کارو با سرچ کردن توی همین سایت یاد گرفتم رفیق .
foreach (Control X in this.Controls) if (X is TextBox) { (TextBox)X.Text = "xx"; }
نقل قول: دسترسی به کنترل های فرم با حلقه for
بیا
for (int i = 0; i < this.Controls.Count; i++)
{
if (this.Controls[i] isCheckBox)
{
this.Controls[i].Text = "xxxx";
}
}
نقل قول: دسترسی به کنترل های فرم با حلقه for
با سلام.
کد زیر برای شناسایی کنترل تکست باکسی هست که تو در تو نیست.
foreach (Control c in Controls)
{
if (c.GetType() == typeof(TextBox))
{
c.Text = "";
}
}
کد زیر برای شناسایی کنترل تکست باکس تو در تو
// حلقه ای برای شناسایی کنترل ها
foreach (Control c in Controls)
{
// حلقه ای برای شناسنایی کنترل های تو در تو
// که مناسب هستش برای کنترل هایی که درون کونتاینرها قرار دارن
foreach (Control d in c.Controls)
{
// شناسایی ایا اینکه کنترل مربوطه از نوع تکست باکس است
if (d.GetType() == typeof(TextBox))
{
// پاک کردن خاصیت تکست ان
d.Text = "";
}
} // end Foreach 2
} // end Foreach 1
نقل قول: دسترسی به کنترل های فرم با حلقه for
جناب morteza_bn گمون کنم سرت کلاه رفت!
هیچ کدوم از کدهای بالا جواب سوال شما نیست.
در واقع با روش های بالا نخواهید توانست خاصیت CheckState چک باکس خود را تغییر دهید.
دوستان لطف کنن اگه میتونن کدی که CheckBox را checked یا Unchecked میکنه قرار بدن نه صرفا تغییر text لیبل ها رو.
نقل قول: دسترسی به کنترل های فرم با حلقه for
این کد رو هم امتحان کنید :
foreach (Control ct in this.Controls)
{
if (ct.GetType() == typeof(CheckBox))
{
if ((ct as CheckBox).Checked)
{
MessageBox.Show((ct as CheckBox).Name);
}
}
}
نقل قول: دسترسی به کنترل های فرم با حلقه for
نقل قول:
نوشته شده توسط
zayens
جناب morteza_bn گمون کنم سرت کلاه رفت!
هیچ کدوم از کدهای بالا جواب سوال شما نیست.
در واقع با روش های بالا نخواهید توانست خاصیت CheckState چک باکس خود را تغییر دهید.
دوستان لطف کنن اگه میتونن کدی که CheckBox را checked یا Unchecked میکنه قرار بدن نه صرفا تغییر text لیبل ها رو.
جگرت شم نوشته خودش کد : form1.controls[i].text="xxxxx"
را نوشته و غلطه خوب یعنی می خواسته تکستش را تغییر بده در ضمن جایی نگفته تو سوال چک داشته باشه یا نه!!!:لبخند:
نقل قول: دسترسی به کنترل های فرم با حلقه for
سلام
راحت ترين راه اينه كه به كنترل مورد نظر اشاره كني تا فعال بشه بعد از اون استفاده كني
نقل قول: دسترسی به کنترل های فرم با حلقه for
نقل قول:
نوشته شده توسط
Mohandes2009
جگرت شم نوشته خودش کد :
form1.controls.text="xxxxx"
را نوشته و غلطه خوب یعنی می خواسته تکستش را تغییر بده در ضمن جایی نگفته تو سوال چک داشته باشه یا نه!!!:لبخند:
به سوالش دقت کنین
نقل قول:
نوشته شده توسط
morteza_bn
سلام دوستان
نقل قول:
نوشته شده توسط
morteza_bn
من یه فرم دارم که توش حدود 30 تا , checkbox وجود داره حالا می خوام با یه حلقه for به اینا دسترسی داشته باشم تا بتونم مقدار شو تغییر بدم میشه بگید چجوری میشه این کار رو انجام داد
من با خاصیت controls از form این کار رو می خواستم انجام بدم ولی پیغام خطا داد که مشخص می شد هیچی تو این خاصیت وجود نداره کد تقریبا بصورت زیر بود
form1.controls.text="xxxxx"
[i][i]جمله ی " تقریبا بصورت زیر بود " یعنی : یه چیزایی تو این مایه ها بود
درضمن: اگر صد تا چک باکس هم در یک فرم باشه در صورتی که همش در GroupBox باشه ویژوال،تعداد کنترل ها را برابر 1 میداند.(با دستور count امتحان کنید)
این هم کد چک مارک کردن همه ی چک باکس ها
نقل قول می گردد که کد، مال Salar Ashgi میباشد(صرفا جهت احترام به حقوق):لبخند:
البته کمی با تغییر
foreach (Control c inthis.Controls)
{
if (c.GetType() == typeof(CheckBox))
{
if ((c asCheckBox).CheckState == CheckState.Unchecked)
{
(c asCheckBox).CheckState = CheckState.Checked;
}
}
}
نقل قول: دسترسی به کنترل های فرم با حلقه for
کاربر zayens ، یه نقل قولی هم میزدید بد نبود ، عینا کد رو کپی و پیست کردید و همینطوری نوشتید ،
سعی کنید به حقوق دیگران احترام بگذارید ./
نقل قول: دسترسی به کنترل های فرم با حلقه for
نقل قول:
نوشته شده توسط
Salar Ashgi
کاربر
zayens ، یه نقل قولی هم میزدید بد نبود ، عینا کد رو کپی و پیست کردید و همینطوری نوشتید ،
سعی کنید به حقوق دیگران احترام بگذارید ./
دورت بگردم بیچاره نوشت که مال تو هست :لبخند:خونت را رنگی نکن:بوس:
1 ضمیمه
نقل قول: دسترسی به کنترل های فرم با حلقه for
سلام
پس این توابع بازگشتی واسه چی ساخته شده
که تو این جور مواقع ازش استفاده کنیم دیگه
privatevoid button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.Controls.Count; i++)
{
this.setCheck(this.Controls[i], true);
}
}
void setCheck(Control c,bool b)
{
if (c isCheckBox)
{
(c asCheckBox).Checked = b;
}
for (int i = 0; i < c.Controls.Count; i++)
{
this.setCheck(c.Controls[i], true);
}
}
نقل قول: دسترسی به کنترل های فرم با حلقه for
نقل قول:
پس این توابع تودرتو واسه چی ساخته شده
دوست عزیز ، ما اصلا در خانواده C از جمله : C#,C++,C ، اصلا مفهومی بنام توابع تودرتو نداریم ، چون قانونا
تو این زبانها تابع رو نمیشه داخل تابع تعریف کرد !
در ضمن ، الگوریتم شما هم سربار زیادی روی سیستم داره و اینکار حتما باید با حلقه انجام بشه و شما
این حلقه ها رو فقط داخل یک تابع بکار بردید ، همین و بس ، و اینکار هیچ کمکی به بهینه کردن مساله
نمیکند ! البته اینا توصیه دوستانه بود ، امیدوارم پذیرا باشید ./
با امید موفقیت ./
نقل قول: دسترسی به کنترل های فرم با حلقه for
از دوستان عذرخواهی می کنم
به جای توابع بازگشتی نوشته بودم توابع تودوتو
منظور من بازگشتی بود که اشتباه شد
مثالی هم که زدم توابع بازگشتی هست
نقل قول: دسترسی به کنترل های فرم با حلقه for
اما با استفاده از توابع بازگشتی که کد باید اینجوری میشد !!!
void setCheck(int i)
{
if (i==(this.controls.count))
return;
if (this.controls[i] is CheckBox)
this.controls[i] as CheckBox.Checked = true;
i++;
setCheck(i);
}
private void button1_Click( object sender, EventArgs e)
{
this .setCheck(0);
}
البته آقا محسن استاد من بودن جسارت کردم و معذرت میخوام به خاطر این مسأله .فقط به خاطر اینکه ایرادات خودم برطرف بشه این کد رو گذاشتم.