有没有一种方法可以让ToolStripSplitButton上有一个检查状态?我希望有一个带有选中属性的ToolStripButton,以确定是否在应用程序的窗口中显示了覆盖。我的用户希望有直接的交互,以控制覆盖的不透明度,并这样做,我设想有一个拆分按钮,其中次要按钮打开一个滑块,以控制不透明度。(当然,这不是标准的功能,但我有信心能够将这些功能组合在一起)。
但是,ToolStripSplitButton没有选中的属性,所以我不能直接这样做。我尝试使用一个标准的ToolStripButton,它旁边有一个单独的ToolStripSplitButton,它的DropDownButtonWidth = 11,边距= -5,1,0,2,所以看起来它是属于ToolStripButton的。它看起来很好,但是要完成它们是一个单一按钮的错觉,我需要让它们都用相同的VisualStyles.PushButtonState绘制--所以当鼠标在它们上面时,它们都会变热。
首先,我尝试使用两个按钮上的MouseEnter和MouseLeave事件来尝试更改另一个按钮的背景色,但没有效果。然后,我尝试使用每个按钮的each事件来使用ButtonRenderer.DrawButton呈现它们,并使用PushButtonState = Hot,但这似乎也不起作用,而且变得非常混乱。看来一定有更好的办法!
是否有一个简单的,或至少是一个实际的解决办法?
编辑:我想要的效果是这样的:
发布于 2016-02-23 11:29:55
我建议您创建自己的UserControl
并将其用作ToolStripItem
。
toolStripMenuItem.DropDownItems.Add(new ToolStripControlHost(new OverlayControl()));
下面是OverlayControl
的一个简单示例,它是从您的描述中推导出来的(我建议您使用Designer
创建一个真正的UserControl
)。
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();
}
}
https://stackoverflow.com/questions/35570331
复制相似问题