-1

我有许多不同类型的控件,当鼠标悬停在它上面时,我想对其产生淡化效果。我需要让我的方法像这样工作:

public void doFade(Object myControl){
    (cast?)myControl.BackgroundColor = Color.Red;
}

有可能吗?如果可以,我该怎么做?谢谢!

4

4 回答 4

4
public void doFade(Control myControl)
{
    myControl.BackColor = Color.Red;
}

将Object类型变量作为参数传递是个坏主意,请使用Control使其显式化。

于 2013-04-30T11:54:36.130 回答
1

只需让它们都从基类派生(ControlBase也许?),然后更改您的参数以将其强制转换为基类(或者可能只是将基类作为参数?)。

public void doFade(Object myControl)
{
    ((ControlBase)myControl).BackColor = Color.Red;
}

假设这是ControlBase

public abstract class ControlBase
{
    public Color BackColor { get; set; }
}
于 2013-04-30T11:54:43.123 回答
1

是的,这是可能的,但你不应该在继承树中上升太多。
所有可视化组件(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;
}

这样你也可以很好地利用多态性!

于 2013-04-30T11:57:42.990 回答
0

当鼠标“进入”您的控件时,您可以使用 .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;
}
于 2013-04-30T11:59:13.930 回答