マウスを上に置いたときにフェード効果を持たせたいさまざまな種類のコントロールがあります。メソッドを次のように機能させる必要があります。
public void doFade(Object myControl){
(cast?)myControl.BackgroundColor = Color.Red;
}
それは可能ですか?もしそうなら、どうすればいいですか?ありがとう!
public void doFade(Control myControl)
{
myControl.BackColor = Color.Red;
}
Object型の変数を引数として渡すのは良くありません。Controlを使用して明示的にします。
はい、これは可能ですが、継承ツリーであまり上に行くべきではありません。
すべてのビジュアル コンポーネント (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;
}
このようにして、ポリモーフィズムもうまく利用できます。
それらをすべて基本クラスから派生させて(ControlBase
多分?)、パラメーターを変更して基本にキャストします(または、基本クラスをパラメーターとして使用するだけですか?)。
public void doFade(Object myControl)
{
((ControlBase)myControl).BackColor = Color.Red;
}
これがあったと仮定しますControlBase
:
public abstract class ControlBase
{
public Color BackColor { get; set; }
}