2

ユーザーコントロールを作成しました。これは基本的に、いくつかのカスタム プロパティを持つボタンです。

public partial class CustomButton : Button {
    // My custom properties, constructor and events
}

これをフォームに追加するたびにCustomButton、そのデフォルトText値は「customButtonX」に設定されます。ここで、X は 1、2、3、... です。

この値を変更するにはどうすればよいですか? " buttonX " (X = 1, 2, 3...)にしたいと思います。

EDIT:デザインビューを介してフォームにボタンを追加するときに、トリック(または私がしなければならないこと)をアクティブにしたいと思います。CustomButtonつまり、ツールボックスからフォームにをドラッグ アンド ドロップすると、そのText値は「buttonX」になります。

4

4 に答える 4

4

デフォルトは「yourControlNameX」です。ただし、コンストラクターで名前を置き換えることができます。

これは実行時にのみ機能することに注意してください (設計時ではありません)。

public partial class CustomButton : Button {
    // My custom properties, constructor and events

    public CustomButton() 
    {  
         this.Text = this.Text.Replace("customButton ", "button");
    }
}
于 2012-08-06T07:17:18.673 に答える
3

テキストを上書きして、必要なものを設定するだけです。

public partial class CustomButton  : Button {

    public override string Text
    {
        get
        {
            //return custom text
            return base.Text;
        }
        set
        {
            //modify value to suit your needs
            base.Text = value;
        }
    }
 }
于 2012-08-06T07:17:33.913 に答える
3

コントロールをツールボックスからフォームにドラッグすると、トリガーされるイベントがいくつかあります。あなたの場合、コントロールの text プロパティが String.Empty からデフォルト名に変更されたときに発生するものにサブスクライブし、それを変更する必要があります。これを行うには、フォームにコントロールを追加する前に、これらのイベントを公開するサービス (IComponentChangeService の実装) を取得する必要があります。これは、コントロールの Site プロパティをオーバーライドすることで実行できます。ここにある例を変更すると、この種のコードが機能するはずです。

    private IComponentChangeService _changeService;

    public override System.ComponentModel.ISite Site
    {
        get
        {
            return base.Site;
        }
        set
        {
            _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService));
            if (_changeService != null)
                _changeService.ComponentChanged -= new ComponentChangedEventHandler(OnComponentChanged);
            base.Site = value;
            if (!DesignMode)
                return;
            _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService));
            if (_changeService != null)
                _changeService.ComponentChanged += new ComponentChangedEventHandler(OnComponentChanged);
        }
    }

    private void OnComponentChanged(object sender, ComponentChangedEventArgs ce)
    {
        CustomButton aBtn = ce.Component as CustomButton;
        if (aBtn == null || !aBtn.DesignMode)
            return;
        if (((IComponent)ce.Component).Site == null || ce.Member == null || ce.Member.Name != "Text")
            return;
        if (aBtn.Text == aBtn.Name)
            aBtn.Text = aBtn.Name.Replace("customButton", "button");
    }
于 2012-08-06T09:43:20.337 に答える