PDA

View Full Version : سوال: کد عمومی برای تغییر ForColor در دکمه های یک فرم



Helmod
یک شنبه 16 تیر 1392, 21:46 عصر
سلام

چطور میشه یه کد نوشت که وقتی روی هر یک از دکمه های یک فرم Focus بشه ، رنگ فونت یا همون ForeColor مثلاً قرمز بشه .

تک تک میشه این کد رو نوشت :

private void button_Enter(object sender, EventArgs e)
{
button.ForeColor = Color.Red;
}


ولی اگه 20 تا دکمه داشته باشیم کار سختی میشه و فکر کنم اشتباهه !


می خام یه کد عمومی بنویسیم که هر گاه روی هر یک از دکمه ها فوکوس شد رنگش عوض شه .

همینطور روی تکست باکس ها ، هر وقت Enter شد ( ورود به یک تکست باکس ) رنگ زمینه عوض شه

مرسی

khokhan
یک شنبه 16 تیر 1392, 22:49 عصر
سلام

چطور میشه یه کد نوشت که وقتی روی هر یک از دکمه های یک فرم Focus بشه ، رنگ فونت یا همون ForeColor مثلاً قرمز بشه .

تک تک میشه این کد رو نوشت :

private void button_Enter(object sender, EventArgs e)
{
button.ForeColor = Color.Red;
}


ولی اگه 20 تا دکمه داشته باشیم کار سختی میشه و فکر کنم اشتباهه !


می خام یه کد عمومی بنویسیم که هر گاه روی هر یک از دکمه ها فوکوس شد رنگش عوض شه .

همینطور روی تکست باکس ها ، هر وقت Enter شد ( ورود به یک تکست باکس ) رنگ زمینه عوض شه

مرسی

یه دونه برای باتن ویه دونه برای تکست باکس dll نوشته و برای هرکدوم هم مثالی زده ام

کدهای مربوط به dll باتن
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace fucos_button1
{
public partial class UserControl1 : UserControl
{
Color onEnter = Color.Green;
Color onLeave = Color.Black;
public UserControl1()
{
InitializeComponent();
}

private void UserControl1_Load(object sender, EventArgs e)
{

}

private void button1_Enter(object sender, EventArgs e)
{
this.button1.ForeColor = onEnter;
}

private void button1_Leave(object sender, EventArgs e)
{
this.button1.ForeColor = onLeave;
}
}
}

CsharpNevisi
یک شنبه 16 تیر 1392, 22:56 عصر
از این کد هم میتونی استفاده کنی... !!
البته من امتحانش نکردم ... خودت تو یه ترد بنویس و تستش کن .. !!
foreach (Control Cn in this.Controls)
{
//رنگی که میخوایی اول داشته باشه
Cn.ForeColor = Color.Blue;
if (Cn.Focus())
{
//رنگ موقع فکوس
Cn.ForeColor = Color.Red;
}
}

Helmod
یک شنبه 16 تیر 1392, 23:37 عصر
از این کد هم میتونی استفاده کنی... !!
البته من امتحانش نکردم ... خودت تو یه ترد بنویس و تستش کن .. !!
foreach (Control Cn in this.Controls)
{
//رنگی که میخوایی اول داشته باشه
Cn.ForeColor = Color.Blue;
if (Cn.Focus())
{
//رنگ موقع فکوس
Cn.ForeColor = Color.Red;
}
}

دستتون درد نکنه ، ولی امتحانش کردم نشد === یعنی میشه رنگ اولیه رو تعریف کرد و درست ج میده ولی تووی فوکوس کار نمیکنه

در ضمن این تمام کنترل خای موجود رو تغییر رنگ میده می خوام فقط دکمه هام این طوری بشن

CsharpNevisi
یک شنبه 16 تیر 1392, 23:55 عصر
این یکی چی ؟
foreach (Control Cn in this.Controls)
{
//رنگی که میخوایی اول داشته باشه
Cn.ForeColor = Color.Blue;
if (Cn.Focus() == true)
{
//رنگ موقع فکوس
Cn.ForeColor = Color.Red;
}
}
راستی تردی که مینویسی باید اینو تو حلقه بی نهایت بزاریا ... !!

Helmod
دوشنبه 17 تیر 1392, 00:13 صبح
[QUOTE=CsharpNevisi;1813580]این یکی چی ؟
foreach (Control Cn in this.Controls)
{
//رنگی که میخوایی اول داشته باشه
Cn.ForeColor = Color.Blue;
if (Cn.Focus() == true)


امتحان کردم نشد //

این کدیه که برنامه میفهمه توی فرم دکمه هست :

[CSHARP] foreach (var item in this.Controls)
{
if (item is Button)
{

(item as Button).ForeColor = Color.Red;

}
}


حالا چطوری میشه نوشت این دکمه ها هنگام فوکوس رنگشون عوض شه ؟؟؟؟؟

IMANAZADI
دوشنبه 17 تیر 1392, 13:35 عصر
کار نسبتا ساده ای هست
5 دقیقه زمان برد



private void Form1_Load (object sender , EventArgs e)
{
foreach (Control ctrl in this.Controls)
{
if (ctrl is Button)
{
ctrl.MouseEnter +=new EventHandler(ctrl_MouseEnter);
ctrl.MouseLeave += new EventHandler(ctrl_MouseLeave);
}
}

}

void ctrl_MouseEnter (object sender , EventArgs e)
{
Button btn = sender as Button;
btn.BackColor = Color.PaleVioletRed;
}

void ctrl_MouseLeave (object sender , EventArgs e)
{
Button btn = sender as Button;
btn.BackColor = this.BackColor;
}

IMANAZADI
دوشنبه 17 تیر 1392, 13:46 عصر
بالایی برای زمانی که موس حرکت روی کنترل دارد واین هم برای زمانی که با کیبرد یا موس کنترل فوکوس میگیرد


private void Form1_Load (object sender , EventArgs e)
{
foreach (Control ctrl in this.Controls)
{
if (ctrl is Button)
{

ctrl.GotFocus += new EventHandler(ctrl_GotFocus);
ctrl.LostFocus += new EventHandler(ctrl_LostFocus);

}
}

}

void ctrl_LostFocus (object sender , EventArgs e)
{
Button btn = sender as Button;
btn.BackColor = this.BackColor;
}

void ctrl_GotFocus (object sender , EventArgs e)
{
Button btn = sender as Button;
btn.BackColor = Color.Salmon;
}

Helmod
دوشنبه 17 تیر 1392, 22:52 عصر
بالایی برای زمانی که موس حرکت روی کنترل دارد واین هم برای زمانی که با کیبرد یا موس کنترل فوکوس میگیرد


private void Form1_Load (object sender , EventArgs e)
{
foreach (Control ctrl in this.Controls)
{
if (ctrl is Button)
{

ctrl.GotFocus += new EventHandler(ctrl_GotFocus);
ctrl.LostFocus += new EventHandler(ctrl_LostFocus);

}
}

}

void ctrl_LostFocus (object sender , EventArgs e)
{
Button btn = sender as Button;
btn.BackColor = this.BackColor;
}

void ctrl_GotFocus (object sender , EventArgs e)
{
Button btn = sender as Button;
btn.BackColor = Color.Salmon;
}


آقا دمت گرم حل شد مشکل ! مرسی

Helmod
جمعه 21 تیر 1392, 15:37 عصر
بالایی برای زمانی که موس حرکت روی کنترل دارد واین هم برای زمانی که با کیبرد یا موس کنترل فوکوس میگیرد


private void Form1_Load (object sender , EventArgs e)
{
foreach (Control ctrl in this.Controls)
{
if (ctrl is Button)
{

ctrl.GotFocus += new EventHandler(ctrl_GotFocus);
ctrl.LostFocus += new EventHandler(ctrl_LostFocus);

}
}

}

void ctrl_LostFocus (object sender , EventArgs e)
{
Button btn = sender as Button;
btn.BackColor = this.BackColor;
}

void ctrl_GotFocus (object sender , EventArgs e)
{
Button btn = sender as Button;
btn.BackColor = Color.Salmon;
}


یه مشکلی پیش اومد !!! این کد توی فرم یک من کار کرد ، ولی الان همون کد رو توی فرم 2 کپی کردم تا دکمه های این فرم این مثل فرم یک هنگام فوکوس قرمز شن ، ولی کار نمیکنه ! یعتی اصلاً ارور هم نمیده و کار نمیکنه .

IMANAZADI
شنبه 22 تیر 1392, 15:04 عصر
دوست عزیز کپی نکن
چون کد اولی زمانی اجرا میشه که فرم شماره 1 لود میشه و مابقی رویداد ها...
برو تو فرم دومت و روی یه قسمت خالی از فرم که کنترلی نداره دوبار کلیک کن تا رویداد لود فرم در حالت کد باز بشه
بعد کد زیر رو تو اون کپی کن

foreach (Control ctrl in this.Controls)

{

if (ctrl is Button)

{



ctrl.GotFocus += new EventHandler(ctrl_GotFocus);

ctrl.LostFocus += new EventHandler(ctrl_LostFocus);



}

}


بعد پایین رویداد form load این ها رو کپی کن
داخل رویداد فرم لود نه ها ، بعد از رویداد فرم لود

void ctrl_LostFocus (object sender , EventArgs e)

{

Button btn = sender as Button;

btn.BackColor = this.BackColor;

}



void ctrl_GotFocus (object sender , EventArgs e)

{

Button btn = sender as Button;

btn.BackColor = Color.Salmon;

}