PDA

View Full Version : مبتدی: استفاده از متغیر در نام تابع



matinpf
سه شنبه 03 آذر 1394, 16:00 عصر
سلام

من می خوام در نام تابع از یک متغییر استفاده کنم

یعنی به جای


textBox1.Text = "matin";


اینجوری بنویسم




string b = "1";
textBox.b.Text = "matin";



اما کدی که دربالا نوشتم از لحاظ نوشتاری جواب نمیده , کسی میدونه درستش چجوری هست ؟

در وافع می خوام با دونستم شماره یک تکست باکس بتونم محتواش رو در یک تغییر بدم
نمی دونم منظور رو رسوندم یا نه

ژیار رحیمی
سه شنبه 03 آذر 1394, 16:48 عصر
سلام دوست گرامی لینک زیر رو مطالعه کن
https://msdn.microsoft.com/en-us/library/018hxwa8.aspx
با توجه به کد بالا به نظر من روش حل مساله شما روش درستی نمیباشد بهتره توضیحی درباره کاری که میخوای روی TextBox انجام بدی بنویسی

matinpf
سه شنبه 03 آذر 1394, 16:57 عصر
سلام دوست گرامی لینک زیر رو مطالعه کن
https://msdn.microsoft.com/en-us/library/018hxwa8.aspx
با توجه به کد بالا به نظر من روش حل مساله شما روش درستی نمیباشد بهتره توضیحی درباره کاری که میخوای روی TextBox انجام بدی بنویسی
ممنون از توضحتون
در واقع هدف دقیق من




string b = "textBox1";
b.text = "matin";



در واقع برای من همیشه سوال بوده که چطوری وقتی نام یک تابع رو به صورت استرینگ به دست میاریم تابع رو اجرا کنیم

ولی در این مسله من می خوام وقتی مثلا مقدار یک تکست باکس رو تغییر میدم تکست باکس بالاش پایینش و راست و چپش هم مقدارش تغییر کنه خوب با یک محاسبه راحت میشه شماره تکست باکس های همسایه و نامشون رو به دست اورد ولی اینکه مقدارشون رو تغییر داد نیازمنده کار بالاست . فکر م می کنم برای این کار در پی اچ پی یک کد خیلی راحت بود مال سی شارپ خیلی پیچیدست

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

ژیار رحیمی
سه شنبه 03 آذر 1394, 18:05 عصر
به شما پیشنهاد میکنم یه 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ها اضافه میشه که میتونی به تکست بکس های اطراف آن انتصاب دهی

matinpf
سه شنبه 03 آذر 1394, 18:17 عصر
واقعا ممنون
فقط به نظرتون این الگوریتم وقتی تعداد تکست باکس ها زیاد باشه جواب میده
برای مثال ما 9 تا داشته باشیم ( یک مربع 3 در 3) و قصدمون این باشکه با اپدیت هر کدوم چهار تای اطرافشم اپدیت بشن ؟


اون شبه کدی که نوشتم


string b = "textBox1";
b.text = "matin";



به هیچ وجه در سی شارپ قابل پیاده سازی نیست ؟
چون اگر باشه با یک حلقه فور میشه شماره 4 تا تکست باکس کناری رو به دست اورد شماره رو به نام چسبوند و با استفاده از اون کار مورد نظر رو اجاره کرد

matinpf
چهارشنبه 04 آذر 1394, 10:12 صبح
کسی می تونه در ضمینه پیاده سازی شبه کد گفته شده به من کمک کنه ؟

Davidd
چهارشنبه 04 آذر 1394, 11:12 صبح
ولی در این مسله من می خوام وقتی مثلا مقدار یک تکست باکس رو تغییر میدم تکست باکس بالاش پایینش و راست و چپش هم مقدارش تغییر کنه خوب با یک محاسبه راحت میشه شماره تکست باکس های همسایه و نامشون رو به دست اورد ولی اینکه مقدارشون رو تغییر داد نیازمنده کار بالاست . فکر م می کنم برای این کار در پی اچ پی یک کد خیلی راحت بود مال سی شارپ خیلی پیچیدست

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

اگه نام تکست باکس همسایه داشته باشی تغییر مقدارش کاری نداره :
foreach (Control ctrl in this.Controls.Find("textBox1", true))
{
((TextBox)ctrl).Text = "some value";
break;
}

wolf_majid
چهارشنبه 04 آذر 1394, 11:20 صبح
int i;
int.TryParse(textBox1.Text, out i);
var lbl = Controls["label" + i] as Label;
if (lbl != null)
lbl.BackColor = Color.Red;

matinpf
چهارشنبه 04 آذر 1394, 13:49 عصر
اگه نام تکست باکس همسایه داشته باشی تغییر مقدارش کاری نداره :
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)

Davidd
چهارشنبه 04 آذر 1394, 14:04 عصر
خواهش میکنم. تمام کنترل های روی فرم (مانند تکستباکس، لیبل ...) در کالکشنی به نام Controls قرار دارند. متد Find کنترل های با نام موردنظر پیدا می کنه. پارامتر دوم متد Find که true یا false میتونه باشه نشون میده که کنترل های داخل کنترل دیگر (مثلا تکستباکس روی پنل) بررسی شوند یا خیر؟
دستور ((TextBox)ctrl) شی پیدا شده رو به کلاس TextBox تبدیل میکنه. در نهایت دستور break هم باعث میشه که با پیدا کردن اولین مورد از حلقه خارج بشه و بقیه کنترل ها بررسی نشن.