3

その中に と IconCustom ToolStripItemがあるものを作成したかったのです。2 つのラベルcheckboxを使用してカスタム コントロールを作成することで、これを行うことができます。pictureboxpictureboxはアイコンの場合、右はcheckboxお気に入りに位置を追加するための特別な役割を果たします。

そのコントロールを に追加しましたToolStripControlHost

  1. 問題は、左右の空白です。それらを削除したり、アイコンを左のバーに移動して右のスペースを削除したりしたくありません。Paddingand の値を 0に設定しようとしましMarginたが、うまくいきません。同様の問題がある投稿を見つけましたが、正解はありませんでした。それは可能ですか??

ここに画像の説明を入力

  1. ToolStripMenuItem の通常の要素と同じように、MouseEnter で行全体を強調表示したい。背景のプロパティを変更する OnMouseEnter と OnMouseLeave をオーバーライドすると、ToolStripControlHost のアンチリーではなく、ホストされたコントロールの色が変更されるだけです。ToolStripMenuItem と同じ動作をシミュレートすることは可能ですか?

今は画像 'A' のように見えますが、画像 B のように見えるようにしたいのですが、星形のチェックボックスを使用します。

ここに画像の説明を入力

基本的に、私の CustomToolStrip アイテムを ToolStripMenuItem にできるだけ似たものにしたいと考えています。Click (テキストをクリックした場合)ChackChange (スターをクリックした場合)の個別のイベント

それを行う方法はありますか?

それは My ToolStripControlHost コードの一部です:

    private void AddEvents()
    {
        this.ToolStripICItemControl.eMouseEnter += new EventHandler(On_MouseEnter);
        this.ToolStripICItemControl.eMouseLeave += new EventHandler(On_MouseLeave);
    }
    private void AutoSizeControl(Control control, int textPadding)
    {
        // Create a Graphics object for the Control.
        Graphics g = control.CreateGraphics();

        // Get the Size needed to accommodate the formatted Text.
        Size preferredSize = g.MeasureString(
           control.Text, control.Font).ToSize();

        // Pad the text and resize the control.
        this.Size = new Size(
           preferredSize.Width + 5 + 50 + (textPadding * 2),
           this.Size.Height /*+ (textPadding * 2)*/ );

        // Clean up the Graphics object.
        g.Dispose();
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
    }
    protected override void OnSubscribeControlEvents(Control c)
    {
        // Call the base so the base events are connected. 
        base.OnSubscribeControlEvents(c);

        // Cast the control to a  ToolStripCheckBox control.
        ToolStripImageAndCheckBox checkBoxToolStrip = (ToolStripImageAndCheckBox)c;

        // Add the event.
        checkBoxToolStrip.LabelClick += new EventHandler(checkBoxToolStrip_LabelClick);
        checkBoxToolStrip.CheckedChanged += new EventHandler(checkBoxToolStrip_CheckedChanged);
    }
    protected override void OnUnsubscribeControlEvents(Control c)
    {
        // Call the base method so the basic events are unsubscribed. 
        base.OnUnsubscribeControlEvents(c);

        // Cast the control to a ToolStripCheckBox control.
        ToolStripImageAndCheckBox checkBoxToolStrip = (ToolStripImageAndCheckBox)c;

        // Remove the event.
        checkBoxToolStrip.LabelClick -= new EventHandler(checkBoxToolStrip_LabelClick);
    }
    protected override void OnMouseEnter(EventArgs e)
    {
        DefaultBackColor = this.BackColor;
        base.OnMouseEnter(e);
        this.BackColor = Color.Aquamarine;
    }
    protected override void OnMouseLeave(EventArgs e)
    {
        base.OnMouseLeave(e);
        this.BackColor = DefaultBackColor;
    }
    void checkBoxToolStrip_LabelClick(object sender, EventArgs e)
    {
        if (Click != null)
            Click(this, e);
    }
    void checkBoxToolStrip_CheckedChanged(object sender, EventArgs e)
    {
        if (CheckedChange != null)
            CheckedChange(this, e);
    }
    void On_MouseLeave(object sender, EventArgs e)
    {
        OnMouseLeave(e);
        //throw new NotImplementedException();
    }
    void On_MouseEnter(object sender, EventArgs e)
    {
        this.Select();
        this.Focus();
        OnMouseEnter(e);
    }
4

1 に答える 1