استفاده از متغیر در نام تابع
سلام
من می خوام در نام تابع از یک متغییر استفاده کنم
یعنی به جای
textBox1.Text = "matin";
اینجوری بنویسم
string b = "1";
textBox.b.Text = "matin";
اما کدی که دربالا نوشتم از لحاظ نوشتاری جواب نمیده , کسی میدونه درستش چجوری هست ؟
در وافع می خوام با دونستم شماره یک تکست باکس بتونم محتواش رو در یک تغییر بدم
نمی دونم منظور رو رسوندم یا نه
نقل قول: استفاده از متغییر در نام تابع
سلام دوست گرامی لینک زیر رو مطالعه کن
https://msdn.microsoft.com/en-us/library/018hxwa8.aspx
با توجه به کد بالا به نظر من روش حل مساله شما روش درستی نمیباشد بهتره توضیحی درباره کاری که میخوای روی TextBox انجام بدی بنویسی
نقل قول: استفاده از متغییر در نام تابع
نقل قول:
نوشته شده توسط
ژیار رحیمی
ممنون از توضحتون
در واقع هدف دقیق من
string b = "textBox1";
b.text = "matin";
در واقع برای من همیشه سوال بوده که چطوری وقتی نام یک تابع رو به صورت استرینگ به دست میاریم تابع رو اجرا کنیم
ولی در این مسله من می خوام وقتی مثلا مقدار یک تکست باکس رو تغییر میدم تکست باکس بالاش پایینش و راست و چپش هم مقدارش تغییر کنه خوب با یک محاسبه راحت میشه شماره تکست باکس های همسایه و نامشون رو به دست اورد ولی اینکه مقدارشون رو تغییر داد نیازمنده کار بالاست . فکر م می کنم برای این کار در پی اچ پی یک کد خیلی راحت بود مال سی شارپ خیلی پیچیدست
البته میشه با یک سویچ هم همچنین کاری کرد ولی خوب در تعداد تکست باکس خیلی بالا زیاد جالب نیست
نقل قول: استفاده از متغییر در نام تابع
به شما پیشنهاد میکنم یه CustomTextBox بصورت زیر تعریف کنی که چهار Property از نوع TextBox داشته باشه
using System.Windows.Forms;
namespace textConn
{
class CustomTextBox:TextBox
{
public TextBox TxtBoxUp { get; set; }
public TextBox TxtBoxDwon { get; set; }
public TextBox TxtBoxLeft { get; set; }
public TextBox TxtBoxRight { get; set; }
protected override void OnTextChanged(EventArgs e)
{
if (TxtBoxUp != null) TxtBoxUp.Text = Text;
if (TxtBoxDwon != null) TxtBoxDwon.Text = Text;
if (TxtBoxLeft != null) TxtBoxLeft.Text = Text;
if (TxtBoxRight != null) TxtBoxRight.Text = Text;
base.OnTextChanged(e);
}
}
}
وکافیست در فایل Designer فرم نوع TextBox ها رو به نوع CustomTextBox تبدیل کنی .بعد از کامپایل هر TextBox چهار Property از نوع TextBox در پنجره Propertyها اضافه میشه که میتونی به تکست بکس های اطراف آن انتصاب دهی
نقل قول: استفاده از متغییر در نام تابع
واقعا ممنون
فقط به نظرتون این الگوریتم وقتی تعداد تکست باکس ها زیاد باشه جواب میده
برای مثال ما 9 تا داشته باشیم ( یک مربع 3 در 3) و قصدمون این باشکه با اپدیت هر کدوم چهار تای اطرافشم اپدیت بشن ؟
اون شبه کدی که نوشتم
string b = "textBox1";
b.text = "matin";
به هیچ وجه در سی شارپ قابل پیاده سازی نیست ؟
چون اگر باشه با یک حلقه فور میشه شماره 4 تا تکست باکس کناری رو به دست اورد شماره رو به نام چسبوند و با استفاده از اون کار مورد نظر رو اجاره کرد
نقل قول: استفاده از متغیر در نام تابع
کسی می تونه در ضمینه پیاده سازی شبه کد گفته شده به من کمک کنه ؟
نقل قول: استفاده از متغییر در نام تابع
نقل قول:
نوشته شده توسط
matinpf
ولی در این مسله من می خوام وقتی مثلا مقدار یک تکست باکس رو تغییر میدم تکست باکس بالاش پایینش و راست و چپش هم مقدارش تغییر کنه خوب با یک محاسبه راحت میشه شماره تکست باکس های همسایه و نامشون رو به دست اورد ولی اینکه مقدارشون رو تغییر داد نیازمنده کار بالاست . فکر م می کنم برای این کار در پی اچ پی یک کد خیلی راحت بود مال سی شارپ خیلی پیچیدست
البته میشه با یک سویچ هم همچنین کاری کرد ولی خوب در تعداد تکست باکس خیلی بالا زیاد جالب نیست
اگه نام تکست باکس همسایه داشته باشی تغییر مقدارش کاری نداره :
foreach (Control ctrl in this.Controls.Find("textBox1", true))
{
((TextBox)ctrl).Text = "some value";
break;
}
نقل قول: استفاده از متغیر در نام تابع
int i;
int.TryParse(textBox1.Text, out i);
var lbl = Controls["label" + i] as Label;
if (lbl != null)
lbl.BackColor = Color.Red;
نقل قول: استفاده از متغییر در نام تابع
نقل قول:
نوشته شده توسط
Davidd
اگه نام تکست باکس همسایه داشته باشی تغییر مقدارش کاری نداره :
foreach (Control ctrl in this.Controls.Find("textBox1", true))
{
((TextBox)ctrl).Text = "some value";
break;
}
فوق العاده ممنون از شما , دقیقا همون کاری میکنه که من می خوام (اجرا گرفتم ), فقط میشه یکم کد رو بیشتر توضیح بدید که بیشتر درکش کنم , در واقع من تازه سی شارپ شروع کردم برای یک پروژه دانشجویی دارم کار می کنم , با فور ایچ اشنای فقط قسمت های زیر چیکار می کنند ؟ ((شاید در مراحل دیگه برنامه نویسیم به کارم اومد ))
(Control ctrl in this.Controls.Find("textBox1", true))
((TextBox)ctrl)
نقل قول: استفاده از متغیر در نام تابع
خواهش میکنم. تمام کنترل های روی فرم (مانند تکستباکس، لیبل ...) در کالکشنی به نام Controls قرار دارند. متد Find کنترل های با نام موردنظر پیدا می کنه. پارامتر دوم متد Find که true یا false میتونه باشه نشون میده که کنترل های داخل کنترل دیگر (مثلا تکستباکس روی پنل) بررسی شوند یا خیر؟
دستور ((TextBox)ctrl) شی پیدا شده رو به کلاس TextBox تبدیل میکنه. در نهایت دستور break هم باعث میشه که با پیدا کردن اولین مورد از حلقه خارج بشه و بقیه کنترل ها بررسی نشن.