PDA

View Full Version : کار با تعدادزیادی textBox



mani01
شنبه 07 فروردین 1389, 21:40 عصر
من 80 تا تکست باکس دارم که میخوام اگه یه شرطی برقرار شد مثلا رنگ 80 تا تکست باکسم عوض بشه اینو توی یه حلقه فور گذاشتم که غلته
نمی دونم چه جوری باید این کارو کنم
بسیار بسیار ممنون میشم اگه راهنمایی بفرمایید.


for( int i=1; i<81;i++)
textBoxi.BackColor = Color.Red;

Salah Sanjabian
شنبه 07 فروردین 1389, 21:57 عصر
foreach (Control Ctrl in this.Controls)
if (Ctrl is TextBox)
Ctrl.BackColor = Color.Red;

منظورت اینه؟

mani01
شنبه 07 فروردین 1389, 22:04 عصر
وااااااای آرررررررره خیلی خیلی ازتون ممنونم درست کار کرد
حالا اگه یه توضیح مختصری هم درموردش بدید خیلی عالی میشه آخه من تازه کارم:بوس:

Salah Sanjabian
شنبه 07 فروردین 1389, 23:01 عصر
حلقه forech برای پیمایش مجموعه ها بسیار مناسبه.از دو تا المان تشکیل شده که بااستفاده از in از هم جدا میشن. المان سمت راست مجموعه اییه که میخوای باهاش کارکنی و متغیر سمت چپ هم متغیری از نوع مجموعه مورد نظره که مقدار پیمایش شده رو برمیگردونه

mani01
پنج شنبه 12 فروردین 1389, 00:20 صبح
از توضیحاتتون بسیار ممنونم
حلا یه سوال دیگه
اگه بخوام از foreach توی event ها استفاده کنم باید چیکار کنم ؟
یعنی مثلا 50 تا تکس باکس دارم میخوام وقتی که موسم روی آنها رفت رنگ تکس باکسم عوض بشه MouseEnter


private void textBox1_TextChanged(object sender, EventArgs e)
{

foreach (Control Ctrl in this.Controls)
if (Ctrl is textBox)
Ctrl.BackColor = Color.White;
}


بسیار ممنون میشم راهنماییم کنید.

ali.aghdam
پنج شنبه 12 فروردین 1389, 00:46 صبح
دوست عزیز یکم بیشتر توضیح بدید ، اگه اشتباه نکرده باشم شما می خواهید وقتی ماوس روی هر یکی از تکست باکس هات رفت رنگ همون یدونه عوض بشه برای این کار بهترین راه ایجاد یک User Control است که کد نویسی و ویرایش اون را بسیار راحت می کند

mohammad diba
پنج شنبه 12 فروردین 1389, 09:08 صبح
دوست عزیز برای یکی این کد رو بنویس و رویداد بقیه رو با این رویداد ست کن.

mn_zandy63
پنج شنبه 12 فروردین 1389, 09:59 صبح
سلام دوست من، در تایید صحبت دوستان
یه مثال میزنم برات.
این تابع رو بنویس:
private void TextBox_TextChanged(object sender, EventArgs e)
{
((TextBox) sender).BackColor = Color.Red;
}

بعد در رویداد FormLoad یا سازنده کلاست، این کد رو بنویس (من به عنوان نمونه در سازنده نوشتم)
public Form1()
{
InitializeComponent();

foreach (var control in Controls)
{
if (control is TextBox)
{
((TextBox) control).TextChanged += TextBox_TextChanged;
}
}
}


با این کد، برای تمام textbox های داخل فرم، تعریف میکنیم که تابع TextBox_TextChanged، قراره event handler رویداد TextChanged باشه.

موفق باشی.

ali.aghdam
پنج شنبه 12 فروردین 1389, 11:37 صبح
دوست عزیز mn_zandy63 (http://barnamenevis.org/forum/member.php?u=31426) این کار درسته ولی ببینید وقتی در فرم مثلا 80 تا تکست باکس باشه و اگه تو یه فرمی 80 تکست باکس باشه منطقیه که حداقل 20 تا کنترل دیگه باید باشه اینجوری حلقه ما باید 100 بار اجرا بشه
تازه یه شرط داریم که در این حالت مرتبه اجرایی میشه 2 *100 حالا دستور انتساب و ... رو در نظر نمی گیریم ،این راه سر بار اضافی روی سیستم تحمیل می کنه

به نظر من حقیر استفاده از User Control بسیار به صرفه تره چون هم سربار اضافی تحمیل نمی کنه و هم استفاده ازش راحت تره

حالا اگه یکم وارد باشی می تونی یه کنترل بنویسی با امکانات فراتر از کنترل های معمولی !
امیدوارم بهش فک کنی

mn_zandy63
یک شنبه 15 فروردین 1389, 21:45 عصر
سلام دوست من، ali.aghdam
البته در صحت صحبت شما، از این جهت که میشه با user control هایی که خودت مینویسی یا با استفاده از کنترل های آماده کد های سریعتری تولید کرد هیچ شکی نیست.

اینجا یه بحث آموزشی بود در مورد اینکه چه شکلی میشه event handler تعدادی کنترل رو در یک حلقه مقدار دهی کرد. چون سوال دوستمون در این مورد بود.
از این جهت تایید میکنم که علاوه بر توضیح مسئله و مشکل مورد نظرش خوبه که راه حل های بهتر هم گوشزد بشه. (کاری که شما زحمتش رو کشیدی)

اما این موضوع که کدوم روش بهتره، به نظر من کاملا بستگی به شرایط و سیاست طراح و برنامه نویس داره. باید یک trade off بین سرعت اجرا و طراحی با توجه به سیاست طراح بوجود بیاد.
در عین اینکه شما خودت تست کردی؟ واقعا این حلقه با 100 تا کنترل یا 200 تا دستور انتساب در سرعت اجرا چقدر تاثیر خواهد گذاشت؟
اگه در پروژه شما این مقدار بار اضافه اهمیتی نداشته باشه به چه دلیل دیگه ای هزینه نوشتن کد اضافه رو می پذیری؟
علاوه بر این، مثلا اگه شما بخوای جای دیگه ای button ت شکل دیگه ای عمل کنه چی؟ حالا یا باید یه کنترل جدید برای کار جدیدت طراحی کنی یا کنترلی که ساختی رو general تر کنی تا این عمل جدید رو هم support کنه. حالا فرض کن تو کل پروژه ات فقط داخل همین یه دونه فرم این عمل رو میخوای button ت انجام بده، واقعا اصلا ارش داره برای یه کار به این سادگی یه user control جدید طراحی کنی و به تعداد کلاس های پروژه ات اضافه کنی؟
این یه مثاله، فقط میخواستم بگم، باید شرایط مسئله رو هم دید. همین!