private void ToolbarButtonClick(object sender, ButtonInfo buttonInfo) { var menuCommand = (IMenuCommand)buttonInfo.Tag; _commandHandlerService.ExecuteCommand( menuCommand.CommandName, new CommandContext(_serviceProvider, menuCommand.Parameters)); }
private int FindButton(ButtonInfo buttonInfo) { for (int i = 0, len = Controls.Count; i < len; i++) { var control = Controls[i]; if (control.Tag == buttonInfo) return i; } return -1; }
private void ButtonInfoRemoved(ButtonInfoCollection sender, ButtonInfo buttonInfo) { var index = FindButton(buttonInfo); if (index < 0) // кнопка не найдена throw new ApplicationException( "Кнопка '" + buttonInfo.Text + "' не может быть удалена, так как она отсуствует в списке."); var control = Controls[index]; control.Click -= SmilesToolbarClick; _toolTip.SetToolTip(control, ((ButtonInfo)control.Tag).Hint); Controls.RemoveAt(index); if (sender != null) UpdateButtons(); }
//private ArrayList _buttons = new ArrayList(30); private void ButtonInfoAdded(ButtonInfoCollection sender, ButtonInfo buttonInfo) { var button = buttonInfo.Image == null ? (Control)new Label { Text = buttonInfo.Text, AutoSize = true } : new PictureBox { SizeMode = PictureBoxSizeMode.AutoSize, Image = buttonInfo.Image }; if (!IsSpecialButton(buttonInfo)) { button.Click += SmilesToolbarClick; button.Cursor = Cursors.Hand; _toolTip.SetToolTip(button, buttonInfo.Hint ?? buttonInfo.Text); } button.Tag = buttonInfo; Controls.Add(button); if (sender != null) UpdateButtons(); }
/// <summary> /// Проверка кнопки на её "специальное" использование. /// На "специальных" кнопках не меняется курсор и не отлавливается нажатие мыши. /// </summary> /// <param name="buttonInfo">Описание проверяемой кнопки</param> /// <returns><c>true</c>, если кнопка является "специальной"</returns> private static bool IsSpecialButton(ButtonInfo buttonInfo) { if (buttonInfo == null) throw new ArgumentNullException("buttonInfo"); return buttonInfo.Text == _newLineButtonText; }
/// <summary> /// Вызвает событие ButtonClick. /// </summary> /// <param name="buttonInfo">Описание нажатой кнопки</param> private void OnButtonClick(ButtonInfo buttonInfo) { if (ButtonClick != null) ButtonClick(this, buttonInfo); }
private void ButtonInfoChanged(ButtonInfoCollection sender, ButtonInfo oldButtonInfo, ButtonInfo newButtonInfo) { ButtonInfoRemoved(null, oldButtonInfo); ButtonInfoAdded(null, newButtonInfo); UpdateButtons(); }