2

ToolStripSplitButton で Checked 状態にする方法はありますか? アプリケーションのウィンドウにオーバーレイが表示されているかどうかを判断するために、Checked プロパティを持つ ToolStripButton が必要です。私のユーザーは、オーバーレイの不透明度を制御するために直接対話したいと考えています。そのために、セカンダリ ボタンがスライダー バーを開いて不透明度を制御する分割ボタンを用意することを想像します。(もちろん、それは標準機能ではありませんが、それをまとめることができると確信しています)。

ただし、ToolStripSplitButton には Checked プロパティがないため、直接行うことはできません。DropDownButtonWidth = 11、Margin = -5、1、0、2 で、隣に別の ToolStripSplitButton を持つ標準の ToolStripButton を用意して、ToolStripButton に属しているように見せようとしました。見た目は問題ありませんが、それらが単一のボタンであるという錯覚を完成させるには、同じ VisualStyles.PushButtonState で描画するように両方を取得する必要があります。そのため、マウスがいずれかの上にあるときに両方ともホットになります。

最初に、両方のボタンで MouseEnter イベントと MouseLeave イベントを使用して、他のボタンの背景色を変更しようとしましたが、効果はありませんでした。次に、各ボタンの Paint イベントを使用して、PushButtonState = Hot の ButtonRenderer.DrawButton でレンダリングしようとしましたが、それも機能していないようで、非常に面倒になりました。もっと良い方法があるに違いないようです!

これに対する簡単な、または少なくとも実用的な解決策はありますか?

編集:私が求めている効果は次のようなものです:

チェックボタンと分割ドロップダウンの組み合わせ

4

2 に答える 2

1

UserControl独自に作成し、 として使用することをお勧めしますToolStripItem

toolStripMenuItem.DropDownItems.Add(new ToolStripControlHost(new OverlayControl()));

OverlayControlこれは、あなたの説明から推測されるの簡単な例です( で実数UserControlを作成することをお勧めしますDesigner)。

public class OverlayControl : UserControl
{
    private readonly CheckBox _checkBox = new CheckBox();
    private readonly TrackBar _trackBar = new TrackBar();

    public ToolStripExtended()
    {
        _checkBox.Text = "Overlay";
        BackColor = SystemColors.Window;
        _checkBox.AutoSize = true;
        _trackBar.AutoSize = true;
        var flowLayoutPanel = new FlowLayoutPanel {AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink};
        flowLayoutPanel.Controls.AddRange( new Control[] { _checkBox, _trackBar });
        Controls.Add(flowLayoutPanel);
        AutoSize = true;
        AutoSizeMode = AutoSizeMode.GrowAndShrink;
        PerformLayout();
    }
} 
于 2016-02-23T11:29:55.897 に答える