日期:2014-05-20  浏览次数:20964 次

請教,此處有沒有更好的辦法?
一WinForm有很多TextBox,需要使TextBox得到焦點時背景色變成紅色,我有兩種處理方法:
1:每一TextBox都產生一textBox_Enter事件處理(重復代碼太多,有幾十個TextBox)
2:自己寫一控件處理,繼承TextBox.
請教高手有無更好的辦法?
祝新年快樂,恭喜發財!

------解决方案--------------------
楼主自己都知道怎么做了:还用得着小弟们说了吗?
1:每一TextBox都產生一textBox_Enter事件處理(重復代碼太多,有幾十個TextBox)
这里也可以把所有TextBox的事件指向一个Enter事件不就可以不用重复的代码了吗?

2:自己寫一控件處理,繼承TextBox.
这个也好啊。我经常这样用的,而且这样做会显得你的程序更OO一点
其实楼主都知道的了,只是要小弟们举双手赞成吧。哈哈~~
------解决方案--------------------
用方法2更好
------解决方案--------------------
要是我用第一种
但是只要一个事件处理程序
大家都指过来
处理的时候
TextBox myBox = sender as TextBox;
myBox.BackColor = ...
------解决方案--------------------
//药到病除

public Form1()
{
InitializeComponent();
foreach (Control vControl in Controls)
{
if (vControl is TextBox)
{
((TextBox)vControl).Enter += new EventHandler(TextBox_Enter);
((TextBox)vControl).Leave += new EventHandler(TextBox_Leave);
}
}
}
private void TextBox_Enter(object sender, EventArgs e)
{
((TextBox)sender).BackColor = Color.Red;
}
private void TextBox_Leave(object sender, EventArgs e)
{
((TextBox)sender).BackColor = SystemColors.Window;
}

------解决方案--------------------
private void mytextBox_Enter(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
tb.BackColor = Color.Red;
}
private void mytextBox_Leave(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
tb.BackColor = Color.White;
}
private void setmyEvent(Control c)
{
if( c is TextBox)
{
c.Enter += new System.EventHandler(this.mytextBox_Enter);
c.Leave += new System.EventHandler(this.mytextBox_Leave);
}
for (int i = 0; i < c.Controls.Count; i++)
{
setmyEvent(c.Controls[i]);
}

}
private void Form1_Load(object sender, EventArgs e)
{
setmyEvent(this);

}

------解决方案--------------------
up