如何获取Winforms ToolStripSplitButton以记住单击的最后一个按钮?

时间:2011-08-02 22:49:47

标签: winforms visual-studio-2008 toolstrip

我正在尝试将ToolStripSplitButton用于我的UI的“导出”部分,即

导出为PDF ...

导出到XLS ...

导出为CSV ...

启动时应默认为“导出为PDF ...”,并在用户单击下拉箭头时显示所有可能的设置。

如果用户选择其他导出设置,则应“记住”该设置,并将其显示为默认设置。

编辑例如,如果用户从下拉列表中选择“导出到XLS ...” - “导出到XLS ...”将替换“导出为PDF ...”作为主按钮中的文本,现在可以单击它来创建XLS文件而不是使用下拉列表。

Visual Studio 2008“标准”工具栏有2个控件,其行为方式与我想要的一样。第一个显示“新项目...”(作为图标,而不是文本),但如果您从下拉列表中选择“新网站...”,那将成为默认设置。的 \修改

我认为ToolStripSplitButton会自动执行所有这些操作,但它没有发生,帮助主题几乎没用。

有人可以举例说明如何做到这一点吗?

2 个答案:

答案 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;
}