1

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

导出为 PDF...

导出到 XLS...

导出为 CSV...

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

如果用户选择另一个导出设置,它应该“记住”那个设置,并将其显示为默认设置。

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

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

我以为 ToolStripSplitButton 会自动完成所有这些,但它没有发生,帮助主题几乎没有用。

谁能提供一个如何做到这一点的例子?

4

2 回答 2

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参数来找出单击了哪个项目。

于 2011-08-02T23:22:28.683 回答
1

我想我知道你想做什么。

我从“属性”窗口创建了一个名为 LastExportButton 的设置变量。

这是我拼凑起来的一些代码,它们“记住”了最后一个“选择”的按钮:

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;
}
于 2011-08-03T15:59:07.593 回答