我有许多不同类型的控件,当鼠标悬停在它上面时,我想对其产生淡化效果。我需要让我的方法像这样工作:
public void doFade(Object myControl){
(cast?)myControl.BackgroundColor = Color.Red;
}
有可能吗?如果可以,我该怎么做?谢谢!
public void doFade(Control myControl)
{
myControl.BackColor = Color.Red;
}
将Object类型变量作为参数传递是个坏主意,请使用Control使其显式化。
只需让它们都从基类派生(ControlBase
也许?),然后更改您的参数以将其强制转换为基类(或者可能只是将基类作为参数?)。
public void doFade(Object myControl)
{
((ControlBase)myControl).BackColor = Color.Red;
}
假设这是ControlBase
:
public abstract class ControlBase
{
public Color BackColor { get; set; }
}
是的,这是可能的,但你不应该在继承树中上升太多。
所有可视化组件(UI-Elements)都继承自一个Control
提供属性的类BackColor
。
所以,对于WinForms来说
public void doFade(System.Windows.Forms.Control myControl){
myControl.BackColor = Color.Red;
}
而对于WPF做
public void doFade(System.Windows.Controls.Control myControl){
myControl.Background = Brushes.Red;
}
这样你也可以很好地利用多态性!
当鼠标“进入”您的控件时,您可以使用 .MouseEnter 事件进行注册,然后相应地更改您的控件:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseenter.aspx
在设计师的某个地方:
myControl.MouseEnter += new System.EventHandler(this.doFade);
在您的代码隐藏中:
public void doFade(object sender, System.EventArgs e) {
((Control)sender).BackgroundColor = Color.Red;
}