PDA

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



blake_daniel
پنج شنبه 28 مرداد 1395, 20:35 عصر
درود خدمت دوستان
راستش چون نمیدونم به این کاری که میخام انجام بدم چی میگن نتوستم توی فروم جستجو کنم در موردش
روشی هست که توی کدنویسی شماره کنترل رو مشخص کنیم:
فرض کنین یه تعداد تکست داریم که میخایم یه کاری روش انجام بدیم
چجوری میتونم توی یه حلقه شماره ی کنترلها رو توسط یه شمارنده مشخص کنم
و به جای اینکه بنویسیم:

for(int i = 1; i<= 5; i++); //d
{
textbox1.text
textbox2.text
textbox3.text
}
چجوری میتونم مشخص کنم(به عنوان مثال):

for(int i = 1; i<= 5; i++); //d
{
a=1; //d
textbox[a].text
a=a+1; //d
}

ممنون

alireza4474
پنج شنبه 28 مرداد 1395, 21:44 عصر
سلام
برای مقدمه باید عرض کنم که هر شئ(object مثل تکست باکس یا هر چیز دیگه ای) رو میشه از طریق هر کدام از خاصیت هاش (properties) به اون دسترسی پیدا کرد به شرطی که خاصیت (یا خاصیت های) اون شئ بین اشیائ هم نوعش منحصر به فرد باشه

حالا در حالت کلی این خاصیت میتونه نام اون شئ باشه یا هر خاصیت دیگه ای


حالا در پاسخ شما باید بگم که فکر نمی کنم دقیقا شماره ای برای یک نوع کنترل در فرم ها در نظر گرفته شده باشه و من هم دقیقا نمی دونم شما میخواین چه کاری انجام بدین بتونم کامل راهنماییتون کنم اما فکر کنم بتونین ارایه ای از کنترل های موجود توی یک فرم رو با کد زیر بدست بیارین که چون یک ارایه هست برای کنترل ها شماره در نظر گرفته شده و این نکته هم حائض اهمیت هست که تمامی کنترل های موجود در فرم در این ارایه هستن نه فقط کنترل خاصی مانند تکست باکس

this.controls


اینم بگم که میتونین با استفاده از TabIndex به کنترل مورد نظرتون دسترسی پیدا کنین



اینم بگم که اگه در فرمتون از کنترل هایی مانند panel,groupbox,tabcontrol و... استفاده کردین نمیتونین مستقیما از کد this.controls استفاده کنین چون این کنترل ها از نوع حامل(container) هستن که خودشون میتونن حاوی کنترل باشن و باید کدی مثل panel1.controls بنویسین

blake_daniel
پنج شنبه 28 مرداد 1395, 22:05 عصر
سلام
برای مقدمه باید عرض کنم که هر شئ(object مثل تکست باکس یا هر چیز دیگه ای) رو میشه از طریق هر کدام از خاصیت هاش (properties) به اون دسترسی پیدا کرد به شرطی که خاصیت (یا خاصیت های) اون شئ بین اشیائ هم نوعش منحصر به فرد باشه

حالا در حالت کلی این خاصیت میتونه نام اون شئ باشه یا هر خاصیت دیگه ای


حالا در پاسخ شما باید بگم که فکر نمی کنم دقیقا شماره ای برای یک نوع کنترل در فرم ها در نظر گرفته شده باشه و من هم دقیقا نمی دونم شما میخواین چه کاری انجام بدین بتونم کامل راهنماییتون کنم اما فکر کنم بتونین ارایه ای از کنترل های موجود توی یک فرم رو با کد زیر بدست بیارین که چون یک ارایه هست برای کنترل ها شماره در نظر گرفته شده و این نکته هم حائض اهمیت هست که تمامی کنترل های موجود در فرم در این ارایه هستن نه فقط کنترل خاصی مانند تکست باکس

this.controls


اینم بگم که میتونین با استفاده از TabIndex به کنترل مورد نظرتون دسترسی پیدا کنین



اینم بگم که اگه در فرمتون از کنترل هایی مانند panel,groupbox,tabcontrol و... استفاده کردین نمیتونین مستقیما از کد this.controls استفاده کنین چون این کنترل ها از نوع حامل(container) هستن که خودشون میتونن حاوی کنترل باشن و باید کدی مثل panel1.controls بنویسین

راستش کاری که میخام انجام بدم اینه که میخام یک سری اطلاعات رو از یک سری کنترل تکراری بگیرم و به دیتابیس ارسال کنم برا ذخیره
و چون تعداد کنترلها زیاد هست و تبدیل مقادیر بعضی از کنترل ها هم باید کدنویسی بشه خیلی زیاد و تکراری میشه
میخاستم یه راهی پیدا کنم که بتونم به کمک یه حلقه و با عوض کردن شماره کنترل ها اطلاعات کنترلهای تکراری رو بگیرم
و پاس بدم به دیتا بیس
البته استفاده از ایندکس جواب کار من رو نمیده چون چیزهای زیادی توی فرم هست
و همینطور this.controls هم اون کاری که من میخام رو نمیکنه چون مشکل من فقط با شماره ی کنترلها هست
ولی بازم ممنونم بابت پاسخ
منتظر نظر بقیه دوستان هم هستیم

محمد آشتیانی
پنج شنبه 28 مرداد 1395, 22:19 عصر
سلام
راه اول چیزی هست که شما میخواید انجام بدید ، با استفاده از نام کنترل ها (البته باید حواستون به نام کنترل ها و خطاهای احتمالی باشه)

for (int i = 1; i <= 3; i++)
{
var ctrl = (TextBox)Controls.Find("textBox" + i, false).FirstOrDefault();
if (ctrl != null) ctrl.Text = @"sample text";
}



راه بهتر استفاده از حلقه foreach هست

foreach (var control in Controls.OfType<TextBox>())
{
control.Text = @"sample text";
}




موفق باشید

محمد رضا فاتحی
جمعه 29 مرداد 1395, 17:58 عصر
یه راه حل هم استفاده از آرایه است

TextBox[] textbox =new[] {textBox1, textBox2};
for (int i = 0; i < textbox.Length; i++)
{
textbox[i].Text = "SampleText";
}

blake_daniel
شنبه 30 مرداد 1395, 16:16 عصر
یه راه حل هم استفاده از آرایه است

TextBox[] textbox =new[] {textBox1, textBox2};
for (int i = 0; i < textbox.Length; i++)
{
textbox[i].Text = "SampleText";
}


درود دوست عزیز
ممنونم بابت پاسخ :چشمک:
ولی مورد اولی که جناب آشتیانی نوشتن کار من رو انجام داد
بدرود

blake_daniel
شنبه 30 مرداد 1395, 18:24 عصر
سلام
راه اول چیزی هست که شما میخواید انجام بدید ، با استفاده از نام کنترل ها (البته باید حواستون به نام کنترل ها و خطاهای احتمالی باشه)

for (int i = 1; i <= 3; i++)
{
var ctrl = (TextBox)Controls.Find("textBox" + i, false).FirstOrDefault();
if (ctrl != null) ctrl.Text = @"sample text";
}



راه بهتر استفاده از حلقه foreach هست

foreach (var control in Controls.OfType<TextBox>())
{
control.Text = @"sample text";
}




موفق باشید

درود
جناب آشتیانی اگر توی فرم انواع کنترل رو داشته باشیم چجوری میشه این کد رو نوشت(کد اول)؟؟
یعنی مثلا هم تکست باشه هم چک باکس هم کُمبو باکس و ...؟
میتونم برا هر کدوم یبار بنویسم این کد رو ولی میخام ببینم راهی هست که همین کد رو یکبار برا همشون بنویسم؟
ممنون

nunegandom
شنبه 30 مرداد 1395, 20:22 عصر
سلام
توی یک لیست تمام کنترل هایی که احتیاج داری رو قرار بده حالا ب هر صورتی که میدونی...
بعد توی همین foreach بذار
بهتره یک بار کنترل هاتو لیست کنی برای کارات تا اینکه هر دفعه بخای لیست کنی

nunegandom
شنبه 30 مرداد 1395, 20:27 عصر
قسمت cast کردن هم میتونی داینامیک عمل کنی فقط چون با موبایلم از دوستان بپرسید دقیقش رو بهتون میگن
به صورتی که هر چیزی بخاید رو به صورت objectمیفرستید به یک متود و مقدار و فرمتشو دریافت میکنید