一个完全特征的*按钮

介绍 Elia Sarti在他的文章中总结了SplitButton:一个XP风格的下拉分离按钮[^],我们可能会遇到一个特殊的情况,具体的行动派生出逻辑从一个。在。net中有一个与ToolStrip等价的工具条(ToolStripDropDownButton)。 实际上,还有另一种情况,特定的选项逻辑上,因为一个动作,使我们要求SplitButton帮助。这就是ToolStripSplitButton存在的原因。但是我们不能仅仅通过工具条来解决这种情况。一个分扣用它的钮扣部分具有钮扣的所有特性是非常有用的。 也许,你还不清楚这两种情况。我将分别给这两个例子。 实例,用于逻辑上从一个实例派生的操作 每个经常使用计算机的人可能都完成过某种颜色选择操作。通常,带有按钮部分的背景色的SplitButton表示当前选择的颜色,而下拉控件则列出用于此类操作的所有常用颜色。下图是Windows XP操作系统窗口颜色设置的截图。 color_picker.jpg 例子为选项逻辑,因为一个 在GIS和CAD领域,特别是在GIS中,一个几何图形是由一系列坐标及其视觉样式(包括填充图形、透明图形、边界图形等)组成的。为了选择一个完美的视觉风格,我们可能会频繁地改变一个几何图形的视觉风格。一个一个地修改它很容易,但也很费时。因为很多几何图形之间的区别往往只在于填充图案或透明度或边界样式或透明度和边界样式。批量更改视觉样式是个好主意。我们应该选择一个或两个视觉样式选项需要批量更改。SplitButton将在这种情况下工作。 visual_style.jpg 使用代码 将SpitButton.cs文件复制到项目中,并将SplitButton从“工具箱”拖动到容器控件上。为SplitButton的分割部分选择您喜欢的图像(我提供了两个最常用的SplitImages和源代码)。订阅正确的事件和给出正确的响应是使用控件所要做的所有左侧工作。 隐藏,复制Code

[Browsable(true)]
[Category("Action")]
[Description("Occurs when the button part of the SplitButton is clicked by the mouse.")]
public event MouseEventHandler ButtonMouseClick;

[Browsable(true)]
[Category("Action")]
[Description("Occurs when the button part of the SplitButton is 
	double clicked by the mouse.")]
public event MouseEventHandler ButtonMouseDoubleClick;

[Browsable(true)]
[Category("Action")]
[Description("Occurs when the split part of the SplitButton is clicked by the mouse.")]
public event MouseEventHandler SplitMouseClick;

[Browsable(true)]
[Category("Action")]
[Description("Occurs when the split part of the SplitButton 
	is double clicked by the mouse.")]
public event MouseEventHandler SplitMouseDoubleClick;

下面的屏幕截图演示了如何清楚地使用SplitButton。 demos.jpg 实现 非常容易。重画一遍。 首先,分别为按钮部分和分割部分绘制两个按钮。 第二,绘制按钮部分和分割部分之间的间隙。我用两个非常小的图片从一个按钮来填补空白。看看代码就知道了。 隐藏,Codegraphics副本。DrawImage (img,新的矩形(x, y + 1, _partWidth base.Height-2), 新建矩形(0,1,_partWidth, base)。高度- 2),graphicsun . pixel); 然后,画出分割线。 最后,添加对Backcolor、Backgroundimge、Image、ImageAlign、Text和TextAlign属性的支持。 这是一个简单的控件。这是所有。有关详细信息,请阅读代码。 其他的东西 与源代码一起,我提供了一个ContextContainer类,它用于下拉任何类型的控件。 隐藏,复制Code

ContextContainer _contextContainer;
public Form1()
{
    InitializeComponent();
    _contextContainer = new ContextContainer(new UserControl1());
    _contextContainer.ContextMode = ContextMode.MultiSelect;
}

隐藏,复制Code

private void splitButton5_SplitMouseClick(object sender, MouseEventArgs e)
{
    _contextContainer.Show(splitButton5);
}

上面的代码块可以在Form1.cs文件中找到。它展示了如何使用ContextContainer下拉控件。 我没有正式发布ContextContainer,因为仍然存在一个问题。这已经困扰我很久了。如果用户控件包含的控件的Dock属性被设置为Fill,那么当我们使用ContextContainer将其下拉时,用户控件的大小将缩小为2*2。如果你知道为什么,请告诉我。谢谢你! 历史 2010年12月25日:初任 本文转载于:http://www.diyabc.com/frontweb/news519.html

原文地址:https://www.cnblogs.com/Dincat/p/13451093.html