PDA

View Full Version : سوال: ارتباط textbox دینامیک با trackbar



hassan181
جمعه 14 فروردین 1394, 19:39 عصر
سلام و خسته نباشید خدمت دوستان عزیز
سوالی داشتم:
من تعدادی textbox به صورت دینامیک ساختم. می خوام کاربر با انتخاب هر کدوم از این textbox ها با استفاده از trackbar که بازه 0-9 داره،بتونه مقدار هرکدام از textbox را تغییر بده...
ممنون میشم راهنمایی کنید.
کد ساخت textbox:


for (int i = 0; i <= 9; i++)
{
System.Windows.Forms.TextBox tb0_name = new System.Windows.Forms.TextBox();
tb0_name.Size = new Size(78, 20);
tb0_name.Location = new System.Drawing.Point(-715 + i * 80, -150 + 9 * 25);
//tb0_name.BackColor = Color.Aqua;
tb0_name.Name = "tbg" + i;
panel1.Controls.Add(tb0_name);
}

am_al_59
جمعه 14 فروردین 1394, 19:56 عصر
فکر میکنم شما باید کنترل فعال رو به دست بیاری و با کلیک روی هر کلید متن اونو تغییر بدی
در هر Container فقط یک کنترل میتونه در حالت فعال باشه. با استفاده از نام Container و خاصیت ActiveControl میتونی به TextBox فعال دسترسی داشته باشی


یک راه دیگه هم هست که فکر می کنم بهتر باشه
شما با فعال شدن هر TextBox یک متغیر رو در فرمت Set کن که معلوم بشه کدوم TextBox فعال شده چون با کلیک روی کلیدها کنترل فعال تعییر میکنه اینطوری میتونی محتوی آخرین TextBox فعال رو تغییر بدی

RmeXXXXXXXXX
جمعه 14 فروردین 1394, 21:35 عصر
راه حل ساده تر! این تکست باکس ها رو که به فرم اضافه کردی درون یک آرایه هم نگه دار! بازه ترک بار رو هم 0 تا 9 بده! حالا مقدار انتخابی در ترک بار میشه ایندکس تکست باکس در آرایه!
تکس باکس ها را در موقعه ایجاد نامرئی کن بعد توی رویداد تغییر مقدار ترک بار یه حلقه بذار ک تمام تکست باکس هارو (درون آرایه) نامرئی کنه بعد تکست باکس درون آرایه با ایندکس مقدار ترک بار رو مرئی!
به همین سادگی!
جمعاً چهار خط کد میبره!
1- تعریف آرایه به درون کلاس (نه متد)
2- اضافه به آرایه (توی متد ایجاد تکت باکس ها)
3- رویداد تغییر مقدار ترک بار رو ایجاد کنی
4- داخل این رویداد (با هر تغییر مقدار) تمام تکست باکس های ارایه رو نامرئی کنی بعد تکست باکس مورد نظر را مرئی کن!
تمام

hassan181
جمعه 14 فروردین 1394, 23:01 عصر
فکر میکنم شما باید کنترل فعال رو به دست بیاری و با کلیک روی هر کلید متن اونو تغییر بدی
در هر Container فقط یک کنترل میتونه در حالت فعال باشه. با استفاده از نام Container و خاصیت ActiveControl میتونی به TextBox فعال دسترسی داشته باشی


یک راه دیگه هم هست که فکر می کنم بهتر باشه
شما با فعال شدن هر TextBox یک متغیر رو در فرمت Set کن که معلوم بشه کدوم TextBox فعال شده چون با کلیک روی کلیدها کنترل فعال تعییر میکنه اینطوری میتونی محتوی آخرین TextBox فعال رو تغییر بدی

عزیزم میشه روش دومی که فرمودین رو با کد برام بیشتر توضیح بدید(نمی دونم چجوری میشه textbox فعال که به صورت دینامیک هست رو بدست آورد)

hassan181
جمعه 14 فروردین 1394, 23:03 عصر
راه حل ساده تر! این تکست باکس ها رو که به فرم اضافه کردی درون یک آرایه هم نگه دار! بازه ترک بار رو هم 0 تا 9 بده! حالا مقدار انتخابی در ترک بار میشه ایندکس تکست باکس در آرایه!
تکس باکس ها را در موقعه ایجاد نامرئی کن بعد توی رویداد تغییر مقدار ترک بار یه حلقه بذار ک تمام تکست باکس هارو (درون آرایه) نامرئی کنه بعد تکست باکس درون آرایه با ایندکس مقدار ترک بار رو مرئی!
به همین سادگی!
جمعاً چهار خط کد میبره!
1- تعریف آرایه به درون کلاس (نه متد)
2- اضافه به آرایه (توی متد ایجاد تکت باکس ها)
3- رویداد تغییر مقدار ترک بار رو ایجاد کنی
4- داخل این رویداد (با هر تغییر مقدار) تمام تکست باکس های ارایه رو نامرئی کنی بعد تکست باکس مورد نظر را مرئی کن!
تمام
ممنونم از پاسخ شما
اگر امکان دارد با کد بیشتر توضیح بدید. خیلی واضح نیست برام. متشکرم

am_al_59
شنبه 15 فروردین 1394, 00:35 صبح
با کد خودت برات توضیح میدم
قبلش یک فیلد در برنامت تعریف میکنی که کدش این میشه

private TextBox lastActiveTextBox;

در حلقه ای که نوشتی هم یک خط در انتها اضافه میکنی که کد حلقه میشه این


for (int i = 0; i <= 9; i++)
{
System.Windows.Forms.TextBox tb0_name = new System.Windows.Forms.TextBox();
tb0_name.Size = new Size(78, 20);
tb0_name.Location = new System.Drawing.Point(-715 + i * 80, -150 + 9 * 25);
tb0_name.Name = "tbg" + i;
tb0_name.GotFocus += tb0_name_GotFocus;//کد اضافه شده
}



همونطور که در بالا میبینی رویداد GotFocus که در زمان فعال شدن TextBox رخ میده رو متصل کردی به متدی به نام tb0_name_GotFocus
برای نوشتن متد هم کدش میشه این:

void tb0_name_GotFocus(object sender, EventArgs e)
{
lastActiveTextBox = (TextBox)sender;
}

hassan181
شنبه 15 فروردین 1394, 00:51 صبح
با کد خودت برات توضیح میدم
قبلش یک فیلد در برنامت تعریف میکنی که کدش این میشه

private TextBox lastActiveTextBox;

در حلقه ای که نوشتی هم یک خط در انتها اضافه میکنی که کد حلقه میشه این


for (int i = 0; i <= 9; i++)
{
System.Windows.Forms.TextBox tb0_name = new System.Windows.Forms.TextBox();
tb0_name.Size = new Size(78, 20);
tb0_name.Location = new System.Drawing.Point(-715 + i * 80, -150 + 9 * 25);
tb0_name.Name = "tbg" + i;
tb0_name.GotFocus += tb0_name_GotFocus;//کد اضافه شده
}



همونطور که در بالا میبینی رویداد GotFocus که در زمان فعال شدن TextBox رخ میده رو متصل کردی به متدی به نام tb0_name_GotFocus
برای نوشتن متد هم کدش میشه این:

void tb0_name_GotFocus(object sender, EventArgs e)
{
lastActiveTextBox = (TextBox)sender;
}


دوست عزیز ممنونم ازت
تا اینجا رو گرفتم
اما چجوری این textbox رو به track bar متصل کنم؟ همچنین چجوری می تونم نام اون textbox را بدست بیارم؟

am_al_59
شنبه 15 فروردین 1394, 01:06 صبح
شما خود TextBox فعال رو داری دیگه هرجای کدت بخوای بهش دسترسی داری
مثلاً روی یک Button که کلیک میکنی میخوای توی TextBox فعالت 1 قرار بگیره کدش میشه این:

private void button1_Click(object sender, EventArgs e)
{
lastActiveTextBox.Text = "1";
}