在开发Windows应用程序时,保持与操作系统的一致性是非常重要的。对于需要与Windows 2003风格相匹配的应用程序来说,创建一个具有相同外观和感觉的颜色选择器控件是必不可少的。本文将介绍如何创建一个具有Office 2003外观的颜色选择器。
为了实现这一目标,开发了三种颜色选择器控件,它们分别是:
这些控件都可以通过设置Color属性来获取或设置控件选择的颜色,并且当控件选择的颜色发生变化时,会触发SelectedColorChanged事件。
OfficeColorPicker控件包含了所有颜色选择的功能。它可以通过以下代码在应用程序中以非模态的方式使用:
OfficeColorPicker officeColorPicker = new OfficeColorPicker();
this.Controls.Add(officeColorPicker);
当然,更好的方式是使用其他两个控件提供的弹出方式打开颜色选择器。
ComboBoxColorPicker 控件是从System.Windows.Forms.ComboBox派生的,它在ComboBox中显示选择的颜色。当点击下拉箭头时,它会以弹出窗口的形式打开OfficeColorPicker控件,并具有上下文菜单的行为,即在颜色选择或失去焦点时关闭。
ComboBoxColorPicker comboBoxColorPicker = new ComboBoxColorPicker();
this.Controls.Add(comboBoxColorPicker);
使用此组合框控件的方法如下:
ToolStripColorPicker 控件是从System.Windows.Forms.ToolStripDropDownButton派生的,以便在任何xxxStrip控件中使用该按钮。例如,ToolStrip、ContextMenuStrip、MenuStrip等其他控件都可以使用ToolStripItem。
ToolStrip toolStrip = new ToolStrip();
this.Controls.Add(toolStrip);
ToolStripColorPicker toolStripColorPicker = new ToolStripColorPicker(Color.White);
toolStrip.Items.Add(toolStripColorPicker);
使用ToolStripColorPicker的另一种更简单的方法是利用VS 2005的设计时支持。只需将ToolStrip或其他xxxStrip控件添加到窗体中,然后使用控件的下拉列表来添加ToolStripColorPicker。
ToolStripColorPicker 有以下属性:
public ToolStripColorPickerDisplayType ButtonDisplayStyle;
public Color Color;
public bool AddColorNameToToolTip;
public string ToolTipText;
ButtonDisplayStyle属性与DisplayStyle属性不同,它用于指定按钮的显示样式,包括图像、文本和下划线,而不仅仅是图像和文本。
如上所述,所有这些控件都有SelectedColorChanged事件。当控件选择的颜色发生变化时,该事件会被触发。使用此事件的方法如下:
this.colorPickerControl.SelectedColorChanged += new System.EventHandler(colorPickerControl_SelectedColorChanged);
private void colorPickerControl_SelectedColorChanged(object sender, EventArgs e)
{
Color newColor = colorPickerControl.Color;
// Do anything you want with the newColor
}
SelectedColorChanged事件允许开发者在颜色选择发生变化时执行特定的操作。
为了允许上下文菜单行为,创建了一个ContextMenuForm类,它从System.Windows.Forms.Form派生。这个窗体可以包含任何Control实例,并在失去焦点时自动隐藏。
OfficePickers.Util.ContextMenuForm contextMenuForm = new OfficePickers.Util.ContextMenuForm();
contextMenuForm.SetContainingControl(control);
contextMenuForm.Show(this, new Point(0, 0), 100);
ContextMenuForm类可以用于任何希望的控件。要关闭窗体,即用户选择了一个选项,可以在控件中使用以下代码:
Form parentForm = this.FindForm();
if (parentForm != null) {
parentForm.Hide();
}
为了支持XP主题,应该实现一个主题读取器,并与CustomColors类交互,后者包含了所有的颜色。
添加自动颜色按钮:只需像“更多颜色”按钮一样绘制另一个按钮,并实现它的选择功能即可。