PDA

View Full Version : سوال: تغییر رنگ تمامی textbox ها در صورت دریافت Focus



samadblaj
جمعه 03 آذر 1391, 14:50 عصر
با سلام خدمت دوستان
من میخوام داخل فرمم که تعداد زیادی Text دارم موقع Focus روی یک Text یا COMBO رنگ اون عوض بشه و موقع Leave رنگش به حالت عادی برگرده ولی مهم اینه که نمیخوام واسه هر کنترل Text برم روی Enter و Leave دستی بنویسم میخوام ببینم میتونم توی یکی از رویدادهای فرم دستوری رابنویسم که به ازای Focus روی اون کنترل رنگ عوض بشه و به ازای Leave دوباره رنگش به حالت قبل برگرده
قسمت دوم سوالم میخوام تمام کنترلهای داخل فرمم را با یک دستور خالی کنم مثل Text ها که همه به ازای یک کلید خالی بشه؟
نمیخوام از کاپوننت استفاده کنم.
با تشکر

plus
جمعه 03 آذر 1391, 15:19 عصر
یک راهش اینه که یک کلاس از TextBox مشتق کنی و اونجا کد رو روی Enter و Leave بنویسی، و TextBox مشتق شده توی فرم استفاده کنی.
راه دیگش اینه که توی فرم، با یک حلقه رویداد رو به همه کنترل ها بدی:


public Form1()
{
InitializeComponent();
foreach (Control control in Controls)
if (control is TextBox || control is ComboBox)
{
control.Enter += new EventHandler(control_Enter);
control.Leave += new EventHandler(control_Leave);
}
}
private void control_Enter(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Yellow;
}
private void control_Leave(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Empty;
}

plus
جمعه 03 آذر 1391, 15:22 عصر
برای سوال دوم هم به همین ترتیب:


private void ResetForm()
{
foreach (Control control in Controls)
if (control is TextBox || control is ComboBox)
{
control.Text = string.Emtpy;
}
}

این کد TextBox ها و ComboBox ها رو خالی میکنه. البته اگه کنترل هات داخل GroupBox, Panel یا Container دیگه ای باشن باید کد رو کامل تر بنویسی.

Y_Safaiee
جمعه 03 آذر 1391, 15:24 عصر
سلام دوست من

سادس

1.همه کنترل های مورد نظرتو انتخاب کن بعد برو تو رویداد ها و تو کد Enter و Leave کد زیر رو بنویس :


private void textBox3_Enter(object sender, EventArgs e)
{
Control ctrl = (Control)sender;
ctrl.BackColor = Color.GreenYellow;
}

private void textBox3_Leave(object sender, EventArgs e)
{
Control ctrl = (Control)sender;
ctrl.BackColor = Color.White ;
}


2.کدی برای پاک کردن کل تکس باکس های فرم :


private void button1_Click(object sender, EventArgs e)
{
foreach (Control ctrl in this.Controls)
{
if (ctrl.GetType() == typeof (TextBox)) ctrl.Text = "";
}
}


ضمیمه رو برات گذاشتم

موفق باشی
بایت بایت

samadblaj
جمعه 03 آذر 1391, 15:25 عصر
یک راهش اینه که یک کلاس از TextBox مشتق کنی و اونجا کد رو روی Enter و Leave بنویسی، و TextBox مشتق شده توی فرم استفاده کنی.
راه دیگش اینه که توی فرم، با یک حلقه رویداد رو به همه کنترل ها بدی:


public Form1()
{
InitializeComponent();
foreach (Control control in Controls)
if (control is TextBox || control is ComboBox)
{
control.Enter += new EventHandler(control_Enter);
control.Leave += new EventHandler(control_Leave);
}
}
private void control_Enter(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Yellow;
}
private void control_Leave(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Empty;
}


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

mousa1992
جمعه 03 آذر 1391, 15:30 عصر
سلام دوست عزیز شما میتونی رویداد رو برای یکی از textBox ها بنویسی و بقیه رو برای کارهای مشابه کافیه که از قسمت رویداد ها تابع نوشته شده رو انتخاب کنی(فلش کنار رویدادو که کلیک کنی اسم تابعی که برا یکی از تکس ها نوشتی نمایش میده)

2) مثل حلقه ای که دوستمون در پست 2 نوشتن همه ی کنترل هارو چک کن و اگه کنترل مورد نظرت بود تکس اونو خالی کن
موفق

plus
جمعه 03 آذر 1391, 15:33 عصر
ممنونم plus جان از لطفتون همون روش دوم کارم رو راه انداخت فقط اگه امکانش هست روش دوم رو هم جامع تر توضیح بدید ممنونتون میشم

خواهش میکنم.منظورت روش اوله یا روش دوم در حالتی که GroupBox و اینا دشته باشی؟

samadblaj
جمعه 03 آذر 1391, 15:52 عصر
خواهش میکنم.منظورت روش اوله یا روش دوم در حالتی که GroupBox و اینا دشته باشی؟
ببخشید منظورم روش اول بود...



سلام دوست من

سادس

1.همه کنترل های مورد نظرتو انتخاب کن بعد برو تو رویداد ها و تو کد Enter و Leave کد زیر رو بنویس :


private void textBox3_Enter(object sender, EventArgs e)

{

Control ctrl = (Control)sender;

ctrl.BackColor = Color.GreenYellow;

}



private void textBox3_Leave(object sender, EventArgs e)

{

Control ctrl = (Control)sender;

ctrl.BackColor = Color.White ;

}



2.کدی برای پاک کردن کل تکس باکس های فرم :


private void button1_Click(object sender, EventArgs e)

{

foreach (Control ctrl in this.Controls)

{

if (ctrl.GetType() == typeof (TextBox)) ctrl.Text = "";

}

}



ضمیمه رو برات گذاشتم

موفق باشی
بایت بایت

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


سلام دوست عزیز شما میتونی رویداد رو برای یکی از textBox ها بنویسی و بقیه رو برای کارهای مشابه کافیه که از قسمت رویداد ها تابع نوشته شده رو انتخاب کنی(فلش کنار رویدادو که کلیک کنی اسم تابعی که برا یکی از تکس ها نوشتی نمایش میده)

2) مثل حلقه ای که دوستمون در پست 2 نوشتن همه ی کنترل هارو چک کن و اگه کنترل مورد نظرت بود تکس اونو خالی کن
موفق


موسئ جان از شما هم کمال تشکررو میکنم بابت وقتی که گذاشتید...

بقول یونس عزیز بیت بیت :چشمک:

ali_habibi1384
جمعه 03 آذر 1391, 15:59 عصر
همون كدي رو كه خودتون گفتيد نيازتونو برطرف ميكرد اما بايد اين كد رو توي يك ابزار سفارشي مثل يه تكست باكس استفاده كنيد. يعني يه شي جديد بسازيد و اونو به روش خودتون سفارشيش كنيد.
اين كارو من توي ابزار تكست باكسي كه ساختم انجام دادم ميتونيد آماده اونو از توي امضام دانلود كنيد.

plus
جمعه 03 آذر 1391, 16:05 عصر
ببخشید منظورم روش اول بود...


یک Class توی توی پروژه درست کن و :


public class CustomizedTextBox : TextBox
{
public TextBox()
{
this.Enter += new EventHandler(EnterEventHandler);
this.Leave += new EventHandler(LeaveEventhandler);
}
private void EnterEventHandler(object sender, EventArgs e)
{
BackColor = Color.Yellow;
}
private void LeaveEventHandler(object sender, EventArgs e)
{
BackColor = Color.Empty;
}
}

حالا بعد از Build میتونی این کنترل رو به فرم اضافه کنی.

samadblaj
جمعه 03 آذر 1391, 16:56 عصر
plus عزیز میشه این کدتون رو برام توی قالب پروژه بذاریدش؟

mhq1368
جمعه 03 آذر 1391, 17:02 عصر
سلام

واسه اون تکست باک هایی که توی یه پنل یا groupbox قرار دارن باید چی کار کنیم

plus
جمعه 03 آذر 1391, 17:07 عصر
plus عزیز میشه این کدتون رو برام توی قالب پروژه بذاریدش؟
بفرمایید...

plus
جمعه 03 آذر 1391, 17:16 عصر
سلام

واسه اون تکست باک هایی که توی یه پنل یا groupbox قرار دارن باید چی کار کنیم

اگه از روش مشتق کردن کلاس استفاده کنید مشکلی پیش نمیاد اما در حالتی که از فرم EventHandler ها مقدار میگیرن، باید کدی که نوشتم رو به صورت زیر تغییر داد:


public Form1()
{
InitializeComponent();
SetEventHandlers(Controls);
}

private void SetEventHandlers(Control.ControlCollection controls)
{
foreach (Control control in controls)
{
if (control is TextBox || control is ComboBox)
{
control.Enter += new EventHandler(control_Enter);
control.Leave += new EventHandler(control_Leave);
}
if (control.Controls.Count > 0)
SetEventHandlers(control.Controls);

}
}

private void control_Enter(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Yellow;
}
private void control_Leave(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Empty;
}

البته این کد میتونه توی شرایطی درسر ساز باشه.مثلا اگه شما UserControl ی داشته باشین که توش TextBox باشه این کد روی اونها هم تاثیر میذاره.

ali.mansoori66
دوشنبه 16 بهمن 1391, 21:27 عصر
سلام
آقا کارت خیلی درسته
اصل جنس رو فرستادی