2011-08-02 3 views
1

Я пытаюсь использовать ToolStripSplitButton для "экспорта" часть моего UI, то естьКак получить Winforms ToolStripSplitButton, чтобы запомнить последнюю нажатую кнопку?

Экспорт в PDF ...

Экспорт в XLS ...

Экспорт в CSV .. .

При запуске он должен по умолчанию «Экспортировать в PDF ...» и показывать все возможные настройки, когда пользователь нажимает стрелку вниз.

Если пользователь выбирает другой параметр экспорта, он должен «запомнить» этот и показать его как значение по умолчанию.

Редактировать Например, если пользователь выберет «Экспорт в XLS ...» из раскрывающегося списка - «Экспорт в XLS ...» заменит «Экспорт в PDF ...» в качестве основного текста и теперь они могут нажимать на это, чтобы создавать файлы XLS вместо использования раскрывающегося списка.

Панель инструментов Visual Studio 2008 «Стандартная» имеет 2 элемента управления, которые ведут себя так, как я хочу. Первый показывает «Новый проект ...» (как значок, а не как текст), но если вы выберете «Новый веб-сайт ...» из раскрывающегося списка, это станет стандартным. \ Edit

Я думал, что 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 мог отображать переключатель. Они этого не делают, у них есть только опция для галочки. Что хорошо, все равно, делает очевидным для пользователя то, что использовалось последним. Вы можете имитировать радиокнопку с изображением, если хотите. 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; 
     } 
    } 

Вполне вероятно, что вам не нужны отдельные обработчики событий Щелкните в этом случае единственный метод мог бы сделать это. Вы используете аргумент , чтобы узнать, какой элемент был нажат.

+0

теперь я вижу, что мой вопрос не ясно - смотрите мое редактирование. –

+0

Ну, не проблема, просто обновите свойство текста кнопки и помните, какой из них был выбран в частном поле. Для этого требуется код, он не является параметром point-and-click в дизайнере. –

Смежные вопросы