2

まず、私は.NETを初めて使用するので、質問が単純すぎるか、答えが単純すぎる場合は、事前に謝罪します。私はいくつかの調査を行い、さまざまなことをテストしましたが、それを機能させることができません。私がやろうとしていること:

フォームにはさまざまなツールチップがあり、同じプロパティを使用したいと考えています。例えば:

mySampleTooltip.ShowAlways = true;
mySampleTooltip.IsBalloon = true;
mySampleTooltip.AutomaticDelay = 750;
mySampleTooltip.AutoPopDelay = 32767;

すべてのツールチップに対してそれを行い、コードを100回貼り付ける代わりに、より洗練された解決策があるのではないかと思いました。私のアイデアは、PermaToolTipと呼ばれるクラスToolTipのサブクラスを作成し、この特定のクラスからオブジェクトを作成することでした(ちなみに、それは正しいアプローチですか、それとももっと良い方法がありますか?)。

私のコードは次のようになります。

public class PermaToolTip : ToolTip
{
    private bool _ShowAlways;
    private bool _IsBalloon;
    private int _AutomaticDelay;
    private int _AutoPopDelay;

    // SET ShowAlways Property for subclass
    public bool ShowAlways
    {
        get
        {
            return _ShowAlways;
        }
        set
        {
            _ShowAlways = true;
        }
    }
    // SET IsBalloon Property for subclass
    public bool IsBalloon
    {
        get
        {
            return _IsBalloon;
        }
        set
        {
            _IsBalloon = true;
        }
    }
    // SET AutomaticDelay Property for subclass
    public int AutomaticDelay
    {
        get
        {
            return _AutomaticDelay;
        }
        set
        {
            _AutomaticDelay = 750;
        }
    }
    // SET AutoPopDelay Property for subclass
    public int AutoPopDelay
    {
        get
        {
            return _AutoPopDelay;
        }
        set
        {
            _AutoPopDelay = 32767;
        }
    }
}

しかし、それは機能しません。具体的には:

1)プロパティ名の下に緑色の線が表示され、次のような警告が表示されます。警告:「ResellerRatingsGUI.PermaToolTip.ShowAlways」は、継承されたメンバー「System.Windows.Forms.ToolTip.ShowAlways」を非表示にします。非表示にする場合は、新しいキーワードを使用します。

2)クラスPermaToolTipのオブジェクトをインスタンス化しましたが、必要なプロパティがありません。

コメントへの回答:これはユーザー定義のコントロールではありません。それは.NETコントロールです。

私が間違っていることについて何か考えはありますか?

4

3 に答える 3

8

基本クラスにはすでにこれらのプロパティがあります。あなたがしていることをすることはコンパイラに文句を言うでしょう(あなたがそれnewを隠したいことを示すために使用せずに基本クラスのメンバーを隠しているので)。

新しいプロパティを作成する必要はありません。コンストラクターで基本クラスのデフォルトを希望どおりに設定するだけです。

public class PermaToolTip : ToolTip
{
     public PermaToolTip()
     {
        // Define defaults differently now
        this.ShowAlways = true;
        this.IsBalloon = true;
        this.AutomaticDelay = 750;
        this.AutoPopDelay = 32767;
     }
}

これにより、クラスはToolTipプロパティを使用しますが、デフォルト値は異なります。

于 2012-07-06T17:13:10.367 に答える
3

まず、別の回答で述べられているように、サブクラスには、基本クラスのメンバーと同じ名前のメンバーを含めないでください。ただし、その動作をオーバーライドすることを目的としている場合を除きます。その場合、仮想メンバーまたは抽象メンバーのみをオーバーライドする必要があります。

デザインの観点から、私は別のアプローチを提案します。サブクラスの唯一の目的は、デフォルト値が設定されたToolTipインスタンスを作成することであるように思われます。これを実現するために継承を使用する必要はありません。むしろ、デフォルトが設定されたToolTipインスタンスを提供するある種のヘルパーを検討する必要があります。そうすれば、必ずしも必要ではない、または必要としない具体的なタイプにとらわれることはありません。

クラスの例:

public static class DefaultToolTip 
{
  public static void Create()
  {
    ToolTip tip = new ToolTip();
    tip.ShowAlways = true;
    tip.IsBalloon = true;
    tip.AutomaticDelay = 750;
    tip.AutoPopDelay = 32767;
    return tip;
  }
}

使用法:

ToolTip toolTip = DefaultToolTip.Create();
于 2012-07-06T17:28:56.727 に答える
1

ツールチップを作成してから、SetToolTipを使用します。そうすれば、数百、あるいは1つでも必要ありません。

MSDNから直接

  private void Form1_Load(object sender, System.EventArgs e)
  {
     // Create the ToolTip and associate with the Form container.
     ToolTip toolTip1 = new ToolTip();

     // Set up the delays for the ToolTip.
     toolTip1.AutoPopDelay = 5000;
     toolTip1.InitialDelay = 1000;
     toolTip1.ReshowDelay = 500;
     // Force the ToolTip text to be displayed whether or not the form is active.
     toolTip1.ShowAlways = true;

     // Set up the ToolTip text for the Button and Checkbox.
     toolTip1.SetToolTip(this.button1, "My button1");
     toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
  }
于 2012-07-06T17:17:29.397 に答える