Как отключить изменение размера и кнопку закрытия пользовательской панели задач? - PullRequest
2 голосов
/ 14 мая 2011

Как можно запретить изменение размера настраиваемой области задач Office, чтобы она имела только и всегда имела размеры и не могла закрываться кнопкой «Закрыть».

myCustomTaskPane.Height = 500;
myCustomTaskPane.Width = 500;

Ответы [ 4 ]

3 голосов
/ 16 мая 2011

Что касается изменения размера, просто следите за событием изменения размера панели задач и сбрасывайте размер.Однако вы можете подумать, + почему + вы бы хотели это сделать.Если для вашей панели задач есть минимальный необходимый размер, возможно, имеет смысл ограничить этот минимум.и если содержимое может быть изменяемого размера, возможно, оно должно быть.

Вы также можете переопределить метод OnLayout.Это часто будет работать лучше.

Для кнопки «Закрыть», я думаю, вы захотите перехватить событие VisibleChanged и сделать панель видимой, если она скрыта.Насколько я помню, панели задач на самом деле не «закрыты» как таковые, а просто устанавливают невидимыми.

1 голос
/ 16 декабря 2011

Где _tp - это ссылка на панель задач (а не контейнер CustomTaskPane), _ctp - контейнер CustomTaskPane, iw - InspectorWrapperDictionary:

 void _tpvals_VisibleChanged(object sender, System.EventArgs e)
        {
            _tp.tmr.Start();
        }

И в коде панели задач:

public Timer tmr;

        public taskpane()
        {
            InitializeComponent();

            tmr = new Timer() { Interval = 500 };
            tmr.Tick += new EventHandler(tmr_Tick);
            tmr.Enabled = true;
            tmr.Stop();
        }


void tmr_Tick(object sender, EventArgs e)
        {
            if (iw == null)
                setVars();

            if (_tp.lv_AttachmentList.Items.Count > 0)
                _ctp.Visible = true;

            tmr.Stop();
        }

setvars () - это команда для получения нужного iw и установки ссылок на _tp и _ctp

0 голосов
/ 21 июля 2014

Для «Не должен быть закрыт» - часть проблемы, вы можете использовать это вместо таймера:

private void myCustomTaskPane_VisibleChanged(object sender, EventArgs e)
{
  if (!myCustomTaskPane.Visible)
  {
    //Start new thread to make the CTP visible again since changing the
    //visibility directly in this event handler is prohibited by Excel.
    new Thread(() =>
    {
      myCustomTaskPane.Visible = true;
    }).Start();
  }
}

Надеюсь, это поможет, Йорг

0 голосов
/ 03 июня 2011

Я нашел решение для этого:

void NormalizeSize(object sender, EventArgs e)
    {
        if (this.taskPane.Height > 558 || this.taskPane.Width > 718)
        {
            this.taskPane.Height = 558;
            this.taskPane.Width = 718;
        }
        else{
            this.taskPane.Width = 718;
            this.taskPane.Height = 558;
        }
    }        
...