我正在尝试将ToolStripSplitButton用于我的UI的“导出”部分,即
导出为PDF ...
导出到XLS ...
导出为CSV ...
启动时应默认为“导出为PDF ...”,并在用户单击下拉箭头时显示所有可能的设置。
如果用户选择其他导出设置,则应“记住”该设置,并将其显示为默认设置。
编辑例如,如果用户从下拉列表中选择“导出到XLS ...” - “导出到XLS ...”将替换“导出为PDF ...”作为主按钮中的文本,现在可以单击它来创建XLS文件而不是使用下拉列表。
Visual Studio 2008“标准”工具栏有2个控件,其行为方式与我想要的一样。第一个显示“新项目...”(作为图标,而不是文本),但如果您从下拉列表中选择“新网站...”,那将成为默认设置。的 \修改
我认为ToolStripSplitButton会自动执行所有这些操作,但它没有发生,帮助主题几乎没用。
有人可以举例说明如何做到这一点吗?
答案 0 :(得分:1)
如果ToolStripItems可以显示一个单选按钮,那将是很好的。他们没有,他们只有一个复选标记的选项。哪个好看,仍然有点让用户明白上次使用的是什么。如果需要,可以使用图像模拟单选按钮。 Anyhoo,代码与此类似:
private void oneToolStripMenuItem_Click(object sender, EventArgs e) {
// stuff
//..
setCheck((ToolStripMenuItem)sender);
}
private void twoToolStripMenuItem_Click(object sender, EventArgs e) {
// stuff
//..
setCheck((ToolStripMenuItem)sender);
}
// Add more as needed
//...
private void setCheck(ToolStripMenuItem check) {
foreach (ToolStripMenuItem item in toolStripSplitButton1.DropDown.Items) {
item.Checked = item == check;
}
}
在这种情况下,您可能不需要单独的Click事件处理程序,单个方法可以执行此操作。您可以使用 sender 参数找出单击的项目。
答案 1 :(得分:1)
我想我知道你要做什么。
我在“属性”窗口中创建了一个名为LastExportButton的Settings变量。
这里有一些代码,我把它们“记住”了“选中”的最后一个按钮:
private void Form1_Load(object sender, EventArgs e)
{
string lastButton = Properties.Settings.Default.LastExportButton;
if (ExportSplitButton.DropDownItems.ContainsKey(lastButton))
{
if (lastButton == ExportPDFButton.Name)
ExportSplitButton.DefaultItem = ExportPDFButton;
else if (lastButton == ExportXLSButton.Name)
ExportSplitButton.DefaultItem = ExportXLSButton;
else if (lastButton == ExportCSVButton.Name)
ExportSplitButton.DefaultItem = ExportCSVButton;
ExportSplitButton.Text = ExportSplitButton.DefaultItem.Text;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Properties.Settings.Default.LastExportButton = ExportSplitButton.DefaultItem.Name;
Properties.Settings.Default.Save();
}
private void ExportSplitButton_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
((ToolStripSplitButton)sender).DefaultItem = e.ClickedItem;
((ToolStripSplitButton)sender).Text = e.ClickedItem.Text;
}