Итерация по всплывающим подсказкам - PullRequest
1 голос
/ 19 мая 2010

Ребята, у меня есть форма окна с панелью управления, а внутри панели управления есть несколько других элементов управления с прикрепленным к ним System.Windows.Forms.Tooltip.Как я могу перебрать каждую подсказку и установить для свойства Active подсказки значение false?Подсказки, в отличие от других элементов управления, на самом деле не являются элементами управления.Итак, у меня было это:

foreach (System.Windows.Forms.Control ctrl in this.pnlControl.Controls)
{
    if (ctrl.Name.StartsWith("tt")) // since all my tooltip names start with 'tt'
    {
        System.Windows.Forms.ToolTip TipControl=(System.Windows.Forms.ToolTip)ctrl;

        TipControl.Active=false;
    }
}

Это не работает, хотя.Он получает ошибку, потому что элемент управления ToolTip не наследуется от System.Windows.Forms.Control.Есть идеи?

РЕДАКТИРОВАТЬ: Хорошо, ребята.Я, вероятно, не вдавался в подробности, чтобы получить нужный мне ответ.Моя проблема в том, что я беру все элементы управления на своей панели и перемещаю их на другую панель.Как только они переключаются, подсказки все еще привязаны к элементам управления, что я и хочу.Однако я не могу деактивировать или повторно активировать их после их перемещения, поскольку форма и исходная панель больше не существуют.Однако я нашел решение, которое я опубликую здесь.

Ответы [ 4 ]

2 голосов
/ 19 мая 2010

Как добавить подсказки для двух кнопок?Правильный способ - НЕ создавать два экземпляра ToolTip таким образом:

 ToolTip tt1 = new ToolTip();   //or you can create one in the designer
 tt1.ToolTipTitle = "test";
 tt1.SetToolTip(button1, "caption1");
 ToolTip tt2 = new ToolTip();
 tt2.ToolTipTitle = "test2";
 tt2.SetToolTip(button2, "caption2");

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

ToolTip tt1 = new ToolTip();   //or you can create one in the designer
tt1.ToolTipTitle = "test";
tt1.SetToolTip(button1, "caption1");
tt1.SetToolTip(button2, "caption2");

Чтобы удалить всплывающую подсказку button2, используйте:

tt1.SetToolTip(button2,string.Empty);

Для вашего случая мы можем использовать

foreach(Control c in this.Controls)
{
   tt.SetToolTip(c,string.Empty);
}
0 голосов
/ 19 мая 2010

Хорошо, я создал новый класс, унаследованный от Control, примерно так:

public class TooltipMaster : System.Windows.Forms.Control
{
    private System.Windows.Forms.ToolTip m_tooltip1;
    private System.Windows.Forms.ToolTip m_tooltip2;
    private System.Windows.Forms.ToolTip m_tooltip3;
    private System.Windows.Forms.ToolTip m_tooltip4;

    public System.Windows.Forms.ToolTip ToolTip1 {
        get { return m_tooltip1; }
        set { m_tooltip1 = value; }
    }
    public System.Windows.Forms.ToolTip ToolTip2 {
        get { return m_tooltip2; }
        set { m_tooltip2 = value; }
    }
    public System.Windows.Forms.ToolTip ToolTip3 {
        get { return m_tooltip3; }
        set { m_tooltip3 = value; }
    }
    public System.Windows.Forms.ToolTip ToolTip4 {
        get { return m_tooltip4; }
        set { m_tooltip4 = value; }
    }
}

Тогда я создал экземпляр этого класса внутри события Load моей главной формы. Затем я просто назначил каждую из 4 подсказок четырем подсказкам в этом классе. Наконец, я добавил этот элемент управления на свою панель. Сделав все это, я мог получить доступ к всплывающим подсказкам позже, просматривая каждый элемент управления и ища элемент управления TooltipMaster. Надеюсь, что это имеет смысл!

0 голосов
/ 19 мая 2010

Как правило, у вас есть один экземпляр ToolTip, который обрабатывает отображение подсказок для всех ваших элементов управления. Этот единственный экземпляр всплывающей подсказки является обычным членом вашей формы. Просто установите для его свойства Active значение false.

0 голосов
/ 19 мая 2010

Редактировать: ОК, отбросьте мой предыдущий ответ. Да, ToolTip - это компонент, а не элемент управления, поэтому на самом деле его вообще нет в Panel. От вашего вопроса, похоже, у вас есть один экземпляр ToolTip, и вы используете его для элементов управления внутри этой панели, а также для других элементов управления, верно? В этом случае решение простое: создайте отдельный экземпляр ToolTip и используйте его для элементов управления в Panel, а затем просто обратитесь к нему, чтобы деактивировать его, например.

ttPanel.Active = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...