2011-08-02 25 views
1

我試圖用一個ToolStripSplitButton我的UI的 「出口」 部分,即如何讓Winforms ToolStripSplitButton記住最後一個按鈕被點擊?

導出爲PDF ...

導出到XLS ...

導出爲CSV ..

它在啓動時應默認爲「導出爲PDF ...」,並在用戶單擊下拉箭頭時顯示所有可能的設置。

如果用戶選擇另一個導出設置,它應該「記住」一個,並將其顯示爲默認值。

編輯例如,如果用戶選擇從下拉菜單中「導出到XLS ......」 - 「導出到XLS ......」將取代「導出爲PDF ......」在主文本按鈕,他們現在可以點擊它來創建XLS文件,而不是使用下拉菜單。

Visual Studio 2008「標準」工具欄有2個按照我想要的方式工作的控件。第一個顯示「新建項目...」(作爲圖標,而不是文本),但是如果您從下拉列表中選擇「新建網站...」,那將成爲默認設置。我認爲ToolStripSplitButton會自動完成所有這些工作,但沒有發生,而且幫助主題幾乎沒用。

任何人都可以提供一個如何做到這一點的例子嗎?

回答

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; 
} 
+0

這很好用 - 謝謝! –

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事件處理程序,一個方法可以做到這一點。您使用發件人參數找出哪個項目被點擊。

+0

現在我看到,我的問題是不明確的 - 請我的編輯。 –

+0

好吧,沒問題,只需更新按鈕的Text屬性,並記住在私人字段中選擇了哪一個。這需要代碼,它不是設計師的指向和點擊選項。 –

相關問題