-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

はい、これは可能ですが、継承ツリーであまり上に行くべきではありません。
すべてのビジュアル コンポーネント (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;
}

このようにして、ポリモーフィズムもうまく利用できます。

于 2013-04-30T11:57:42.990 に答える
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 に答える