2013-04-30 46 views
-1

當鼠標懸停在鼠標上方時,我有許多不同類型的控件,我希望它們具有淡入淡出效果。我需要讓我的方法像這樣工作:如何從一個方法內的不同控件訪問「共享」變量

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

是否有可能,如果是這樣,我該怎麼做?謝謝!

+0

你可能想要一個abstact clas秒。看到這個鏈接:http://msdn.microsoft.com/en-IN/library/k535acbf(v=vs.71).aspx – 2013-04-30 11:56:31

+0

@VictorMukherjee爲什麼?說明。 – 2013-04-30 12:03:37

回答

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

這是一個壞主意,一個對象類型的變量作爲參數傳遞,使用控制,使之明確。

+0

該屬性在WinForms – 2013-04-30 12:00:05

+0

@ bash.d中被稱爲'BackColor',這是真的,謝謝! – David 2013-04-30 12:00:58

1

只要他們都從基類派生(ControlBase也許?),然後改變你的參數將其轉換爲基礎(或者可能只是將基類作爲參數?)。

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

假設這是ControlBase

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

該屬性在WinForms – 2013-04-30 12:00:28

+0

@ bash.d中被稱爲'BackColor'謝謝:) – mattytommo 2013-04-30 12:02:50

1

是的,這是可能的,但你不應該在繼承樹還要漲太多。
所有可視組件(UI-Elements)都繼承自提供屬性BackColorControl-類。

所以,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; 
} 

這樣你用好多態性的呢!

相關問題