1

UI の「エクスポート」部分に ToolStripSplitButton を使用しようとしています。

PDF にエクスポート...

XLS にエクスポート...

CSV にエクスポート...

起動時にデフォルトで「PDF にエクスポート...」になり、ユーザーがドロップダウン矢印をクリックすると、可能なすべての設定が表示されます。

ユーザーが別のエクスポート設定を選択した場合、その設定を「記憶」し、デフォルトとして表示する必要があります。

編集たとえば、ユーザーがドロップダウンから [XLS にエクスポート...] を選択した場合、[XLS にエクスポート...] はメイン ボタンのテキストとして [PDF にエクスポート...] を置き換えます。ドロップダウンを使用する代わりに、それをクリックして XLS ファイルを作成します。

Visual Studio 2008 の "標準" ツールバーには、希望どおりに動作する 2 つのコントロールがあります。最初のものは「新しいプロジェクト...」を(テキストではなくアイコンとして)表示しますが、ドロップダウンから「新しいウェブサイト...」を選択すると、それがデフォルトになります。\編集

ToolStripSplitButton がこれをすべて自動的に行うと思っていましたが、実際には行われておらず、ヘルプ トピックはほとんど役に立ちません。

誰でもこれを行う方法の例を提供できますか?

4

2 に答える 2

1

ToolStripItems にラジオ ボタンを表示できればいいのですが。そうではなく、チェックマークのオプションしかありません。これは問題ありませんが、最後に使用されたものをユーザーに明らかにします。必要に応じて、画像を使用してラジオ ボタンをシミュレートできます。とにかく、コードは次のようになります。

    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 に答える