【问题标题】:How to access 'shared' variables from different controls inside a method如何从方法内的不同控件访问“共享”变量
【发布时间】:2013-04-30 11:52:33
【问题描述】:

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

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

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

【问题讨论】:

标签: c# wpf winforms methods


【解决方案1】:
public void doFade(Control myControl)
{
    myControl.BackColor = Color.Red;
}

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

【讨论】:

  • 该属性在WinForms中称为BackColor
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    假设这是ControlBase:

    public abstract class ControlBase
    {
        public Color BackColor { get; set; }
    }
    

    【讨论】:

    • 该属性在WinForms中称为BackColor
    【解决方案4】:

    当鼠标“进入”您的控件时,您可以使用 .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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2011-05-22
      相关资源
      最近更新 更多