عوض کردن رنگ textbox

tina.programer

عضو جدید
سلام : :heart:
من دوتا سوال دارم :D

یکی اینکه من می خوام مثلاً توی هر فرمم 50 تا فید دارم روی هرکدوم که کابر کلیک کرد بک گراندش زرد باشه و وقتی رو اون یکی کلیک کرد اون اولی که پر شده سفید بشه و اونی که کلیک شده مجدد زرد بشه

اینو بخوام با if بنویسم زیاد میشه من یه جا خونده بودم با یه متد آسونی میشه تمام textboxها رو اینطوری کردم اما یادم نمیاد کجا چطوری اینکارو بکنم ؟ :(

دومین سوالم اینه که می خوام به رویداد close فرم یعنی اون ضربدره هست ؟ کد بدم مثلاً application.exit() چطوری اینکار رو بکنم ؟
 

Sharif_

مدیر بازنشسته
نمیدونم روشم اصولی هست یا نه
به نظر من بهترین راه استفاده از casting ابجکت sender است
بهتره یک تابع ایجاد کنید تا رنگ های تکسباکس رو تغییر بده و در رخداد کلیک تکسباکس ها اون رو صدا بزنید برای مصال من تو کد زیر دو تکسباکس دارم که با کلیک روی یکی تغییر به زرد میده و وقتی روی اون یکی کلیک میکنم قبلی سفید و جدید زرد میشه
میتونی رو تمام تکس باکس ها این تابع رو صدا کنی
ابتدا یه ابجکت بدون سازنده بساز برای نگه داشتن تکس باکسی که رنگ زرد هست
object sender1;
private void textBox1_Click(object sender, EventArgs e)
{
تابع صدا زده میشه
textbox_click(sender, e);
}

private void textBox2_Click(object sender, EventArgs e)
{
textbox_click(sender, e);
}
public void textbox_click(object sender, EventArgs e)
{
اولین بار بررسی میشه
if (sender1 == null)
{
TextBox myTextBox2 = (TextBox)sender;
myTextBox2.BackColor = Color.Yellow;
sender1 = sender;
}
else
{
چون ابجکت هست به تکسباکس تایپکست میشه
TextBox myTextBox1 = (TextBox)sender1;
myTextBox1.BackColor = Color.White;
TextBox myTextBox2 = (TextBox)sender;
myTextBox2.BackColor = Color.Yellow;
در اخر هم تکتباکس ارسالی در متغییر ابجکتمون ذخیره میشه
sender1 = sender;
}
}
سوال دوم
فرم دو رخداد FormClosed و FormClosing داره اگر دستورات رو تو FormClosed بنویسد بعد از بسته شدن فرم اجرا میشن ولی اگر تو FormClosing بنویسد قبل از بسته شدن فرم اجرا خواهند شد.
 

A.S.Roma

عضو جدید
کاربر ممتاز
میشه یک متد برای تغییر رنگ نوشت و به ورودی EventHandler همه ی آبجکت ها فرستادش :
کد:
this.textBox1.Click += new System.EventHandler(this.TextBoxes_Click);
this.textBox2.Click += new System.EventHandler(this.TextBoxes_Click);
this.textBox3.Click += new System.EventHandler(this.TextBoxes_Click);
this.textBox4.Click += new System.EventHandler(this.TextBoxes_Click);


private void TextBoxes_Click(object sender, EventArgs e)
        {
            foreach (TextBox item in this.Controls.OfType<TextBox>())
            {
                item.BackColor = Color.White;
            }
            TextBox victim = sender as TextBox;
            victim.BackColor = Color.Red;
        }
 

A.S.Roma

عضو جدید
کاربر ممتاز
خدمت شما :


در محیط VS2010 باز کنید.

اگر در نسخه های پایین تر Run‌نشد . کدهای آن را دستی کپی کنید.
 

پیوست ها

  • 01.zip
    40.2 کیلوبایت · بازدیدها: 0

tina.programer

عضو جدید
نتونستم باز کنم

کاش کدهای هر بخش رو به تفکیک در تاپیک قرار دهید

من 2008 هست ویژوالم
 

A.S.Roma

عضو جدید
کاربر ممتاز
کل TextBox هایی که توی فرمتون هست رو انتخاب کنید . ( با نگه داشتن SHIFT تک تک روشون کلیک کن )
Properties بگیرید و در قسمت events جلوی عبارت کلیک بنویسید TextBoxes_Click
حالا به قسمت code هاتون برید و متدی که بالا براتون نوشتم رو اونجا Paste کنید.
 

tina.programer

عضو جدید
کل TextBox هایی که توی فرمتون هست رو انتخاب کنید . ( با نگه داشتن SHIFT تک تک روشون کلیک کن )
Properties بگیرید و در قسمت events جلوی عبارت کلیک بنویسید TextBoxes_Click
حالا به قسمت code هاتون برید و متدی که بالا براتون نوشتم رو اونجا Paste کنید.

من این کار رو برای دوتا textbox معمولی که نامشون textbox1 و 2 بودن انجام دادم و موفقیت آمیر بود اما دوتا textbox که خودم name دادم انجام داده یکی رو قرمز می کنه دومین هم قرمز نگه میداه و قبلیه رو سفید نمی کنه

در ضمن نام textباکس هایی که تعیین کرده بودم در کد زیر تغییر دادم آیا به جز کد زیر باید در جایی هم تغییر بدم ؟ چون با textbox1 , textbox2 کار می کنه اما اسم که عوض می کنم کار نمی کنه

this.textBox1.Click += new System.EventHandler(this.TextBoxes_Click);
 

Sharif_

مدیر بازنشسته
من این کار رو برای دوتا textbox معمولی که نامشون textbox1 و 2 بودن انجام دادم و موفقیت آمیر بود اما دوتا textbox که خودم name دادم انجام داده یکی رو قرمز می کنه دومین هم قرمز نگه میداه و قبلیه رو سفید نمی کنه

در ضمن نام textباکس هایی که تعیین کرده بودم در کد زیر تغییر دادم آیا به جز کد زیر باید در جایی هم تغییر بدم ؟ چون با textbox1 , textbox2 کار می کنه اما اسم که عوض می کنم کار نمی کنه

this.textBox1.Click += new System.EventHandler(this.TextBoxes_Click);
خب معلومه نام تکسباکس هرچی باشه باید بعد this اون رو بیارید در دستور بالا textBox1 نام پیشفرض هست
اگر متوجه نشدید پروژه رو اینجا بذارید تا یکی از دوستان درستش کنند
 

tina.programer

عضو جدید
می دونم اینو خوب گفتم که عوضش کردم اونو بخونید یه بار هم متنی که نوشتمو متوجه میشید
 

Sharif_

مدیر بازنشسته
ببین به فرض سه تا تکس باکس داری اسماشون text1 ، textbox1 و Textb هستش
حالا رو فرم دوبار کلیک کن
و اینا رو همون form_load کپی کن
کد:
this.textbox1.Click += new System.EventHandler(this.TextBoxes_Click);
this.text1.Click += new System.EventHandler(this.TextBoxes_Click);
this.Textb.Click += new System.EventHandler(this.TextBoxes_Click);
بعد هرجا دیدی form_load تموم شد کد زیر رو کپی کن
کد:
private void TextBoxes_Click(object sender, EventArgs e)
        {
            foreach (TextBox item in this.Controls.OfType<TextBox>())
            {
                item.BackColor = Color.White;
            }
            TextBox victim = sender as TextBox;
            victim.BackColor = Color.Red;
        }
 

tina.programer

عضو جدید
دقیقاً همین کار رو کردم اما یک رنگ باقی می مونه و وقتی روی بعدی کلیک می کنم دیگه رنگ قبلیه سفید نمیشه
 

tina.programer

عضو جدید
اصلاً توی کد مشکلی نیست توی یه پروژه دیگه ای راحت استفاده می کنم و جواب میده
اما رو این پروژه چند تا تب دارم مثلاً تب اول تکست باکس هاش می خوام این حالت رو پیدا کنه که ارور میگیره

کل پروژه رو نمی تونم آپلود کنم آخه ولی کد ایرادی نداره نمی دونم چرا توی این پروژه کار نمی کنه ولی توی یکی دیگه کار می کنه

گفتم شاید بخاطر تب ها باشه یا گروپ باکسم آخه تکس باکس هام توی یه گروپ باکس در یک فرم و در تب مثلاً دوم هستن
 

A.S.Roma

عضو جدید
کاربر ممتاز
این خط را باید تغییر بدید :
this.Controls.OfType<TextBox>()

مثلا" اینجوری :
this.tab1.Controls.OfType<TextBox>()
 

tina.programer

عضو جدید
بازم حل نشد نمی دونم چرا اینطوری میشه روی هرکدوم که کلیک می کنم رنگش تغییر پیدا می کنه اما همونطوری ثابت می مونه چیکار کنم راه حل دیگه ای نیست ازش استفاده کنم ؟
 

Sarp

مدیر بازنشسته
آقاجان کدهاتونو بذارین اینجا تا دوستان حل کنند دیگه
بگن مشکل از کجاست !!!
 

tina.programer

عضو جدید
من خانم جانم :d بعدش هم چرا میزنی گناه دالم ها :(:(:(

من دو تا text باکس دارم روی یک گروپ باکس و در Tabpage1 در یک فرم :cry:

خاصیت click دوتا textباکس رو مساوی TextBoxes_Click قرار دادم .

سپس در بخش لود فرم نوشتم :


کد:
 this.txt1.Click += new System.EventHandler(this.TextBoxes_Click);
            this.txtname.Click += new System.EventHandler(this.TextBoxes_Click);


بعد از تمام شدن بخش Frmload این کدها رو که خود ویژوال با نوشتن رویداد TextBoxes_Click ایجاد کرده بود pAST کردم من کل کد رو قرار میدم .

کد:
private void TextBoxes_Click(object sender, EventArgs e)
        {
              
            foreach (TextBox item in this.tabPage1.Controls.OfType<TextBox>())
            {
                item.BackColor = Color.White;
            }
            TextBox victim = sender as TextBox;
            victim.BackColor = Color.Red;


        }
 

Sharif_

مدیر بازنشسته
اینم برنامه !تکس باکس هم رو فرم هست هم رو tab هم group
 

پیوست ها

  • texbox.zip
    39.6 کیلوبایت · بازدیدها: 0

Similar threads

بالا