none
События CommandBarButton RRS feed

  • Вопрос

  • Приветствую коллеги.
    Есть код.
    public
    partial class ThisDocument
    {
    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
    Office.
    _CommandBarButton b = this.CommandBars["my"].Controls[2] as Office._CommandBarButton;
    Office.
    _CommandBarButtonEvents_Event ev = (b as Office._CommandBarButtonEvents_Event);
    ev.Click +=
    new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(ev_Click);

    }

    void ev_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault)
    {
    MessageBox.Show(DateTime.Now.ToString());
    }

    так вот, событие срабатывает только 1 раз, при повторном клике, ничего не происходит.

    Если сделать так
    object oMissing = System.Reflection.Missing.Value;
    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {

    MyBarInit();
    }
    private void MyBarInit()
    {
    Office.
    CommandBar cb = this.CommandBars.Add("my2", oMissing, oMissing, true);
    cb.Visible =
    true;
    Office.
    CommandBarButton cbb = (Office.CommandBarButton)cb.Controls.Add(Office.MsoControlType.msoControlButton, oMissing, oMissing, oMissing, true);
    cbb.Caption =
    "test";
    cbb.Click +=
    new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(cbb_Click);
    }

    void cbb_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault)
    {
    MessageBox.Show(DateTime.Now.ToString());
    Ctrl.Click +=
    new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(cbb_Click);
    }
    То событие срабатывает несколько раз, а потом опять перестает:(

    Никто не сталкивался?
    Спасибо.

    11 октября 2006 г. 16:43

Ответы

  • насколько я понял - это Word
    Вот здесь вот ошибка:

    public partial class ThisDocument
    {
    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
    Office.
    _CommandBarButton b = this.CommandBars["my"].Controls[2] as Office._CommandBarButton;
    Office.
    _CommandBarButtonEvents_Event ev = (b as Office._CommandBarButtonEvents_Event);
    ev.Click +=
    new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(ev_Click);

    }

    Эти переменные должны быть глобальными. GC удаляет их после выхода из области видимости. Вообще же работа с тулбарами в Office  из .NET аддинов это просто тихий ужас.
    17 октября 2006 г. 13:41

Все ответы

  • Office.CommandBarButton cbb = (Office.CommandBarButton)cb.Controls.Add(Office.MsoControlType.msoControlButton, oMissing, oMissing, oMissing, true);

    Выделенное красным мне не нравится. А вообще, разве оно эдак работает? В самом деле?

    12 октября 2006 г. 19:50
  • насколько я понял - это Word
    Вот здесь вот ошибка:

    public partial class ThisDocument
    {
    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
    Office.
    _CommandBarButton b = this.CommandBars["my"].Controls[2] as Office._CommandBarButton;
    Office.
    _CommandBarButtonEvents_Event ev = (b as Office._CommandBarButtonEvents_Event);
    ev.Click +=
    new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(ev_Click);

    }

    Эти переменные должны быть глобальными. GC удаляет их после выхода из области видимости. Вообще же работа с тулбарами в Office  из .NET аддинов это просто тихий ужас.
    17 октября 2006 г. 13:41
  •  Владимир Полех написано:
    насколько я понял - это Word
    Вот здесь вот ошибка:

    public partial class ThisDocument
    {
    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
    Office.
    _CommandBarButton b = this.CommandBars["my"].Controls[2] as Office._CommandBarButton;
    Office.
    _CommandBarButtonEvents_Event ev = (b as Office._CommandBarButtonEvents_Event);
    ev.Click +=
    new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(ev_Click);

    }

    Эти переменные должны быть глобальными. GC удаляет их после выхода из области видимости. Вообще же работа с тулбарами в Office  из .NET аддинов это просто тихий ужас.

    Спасибо! поробую, по идее GC не должен их удалять, есть ведь кнопка "my" которая не удаляется и она содержит ссылку на обработчик.

    17 октября 2006 г. 15:20