как мне показать tooltip для элемента меню в status bar?
От: bobbisson Россия http://fuzzy.ru/
Дата: 04.04.03 15:57
Оценка:
привет.


сразу скажу, что разрабатываю я многоязычный софт. поэтому для загрузки строковых констант надо использовать System.Resources.ResourceManager, а никак не лобовую атаку.

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

идея заключается в том, чтобы при вызове OnSelect (кстати, в идеале было бы не OnSelect, а OnIdle в борландовской терминологии, но я не нашел такого event'а в C#) вставить замысловатое сообщение типа "А это, дружок, пункт меню такой-то" в статус бар.

с одной стороны, можно использовать компонент Tooltip и загрузить в него строки на этапе InitializeComponent. отпадает, поскольку элементы меню явлшяются MenuItem а не Control, как этот Tooltip гад такой требует.

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

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

гуру, есть идеи получше?

22.12.03 18:46: Перенесено модератором из '.NET' — AVK
Re: как мне показать tooltip для элемента меню в status bar?
От: Аноним  
Дата: 04.04.03 16:13
Оценка: 14 (3) +1
Здравствуйте, bobbisson, Вы писали:

B>гуру, есть идеи получше?


посмотри http://www.codeproject.com/cs/menu/extendedinterface.asp
Re: как мне показать tooltip для элемента меню в status bar?
От: mihailik Украина  
Дата: 04.04.03 16:16
Оценка:
B>вот и получается, что единственный способ выводить подсказки пользователю — это писать свои функции для каждого элемениа меню, что согласитесь, геморройно.

Если так, с нахрапа, то забивай подсказки в Tag. А в OnSelect выводи этот Tag на StatusBar. Может и поумнее метод есть, но для сельской местности покатит
... << RSDN@Home 1.0 beta 6a >>
Re[2]: как мне показать tooltip для элемента меню в status b
От: bobbisson Россия http://fuzzy.ru/
Дата: 04.04.03 16:27
Оценка:
Здрасьте, вы типа писали:

А>посмотри http://www.codeproject.com/cs/menu/extendedinterface.asp


зашибись я в восторге спасибо за превосходную ссылку
Re: как мне показать tooltip для элемента меню в status bar?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.04.03 18:27
Оценка: 14 (2)
Здравствуйте, bobbisson, Вы писали:

B>OnIdle в борландовской терминологии, но я не нашел такого event'а в C#)


Во первых не в C#, а в дотнете, во вторых Application.Idle
... << RSDN@Home 1.0 beta 6 (np: тихо) >>
AVK Blog
Re[2]: как мне показать tooltip для элемента меню в status b
От: Кирилл Осенков Украина
Дата: 03.03.04 13:20
Оценка:
Здравствуйте, mihailik, Вы писали:

B>>вот и получается, что единственный способ выводить подсказки пользователю — это писать свои функции для каждого элемениа меню, что согласитесь, геморройно.


M>Если так, с нахрапа, то забивай подсказки в Tag. А в OnSelect выводи этот Tag на StatusBar. Может и поумнее метод есть, но для сельской местности покатит


Мужики, что-то я ничего не понял... Сколько ни искал, нету у MenuItem свойства Tag Это наверное потому, что MenuItem унаследована не от Control (у которого собсно св-во Tag и объявлено), а от Component... Че делать?

Мне позарез нужно параметризовать пункты меню объектом (как этого требует паттерн Команда — пишу конфигурируемый юзером UI) — что мне, ради этого, делать нового наследника от MenuItem?? Чтобы приаттачить туда св-во Command? Так это ж геморрой будет, в разделе "Windows Form Designer generated code" все ручками переделывать? MS говорит, нельзя так. А если еще Авалон выйдет, опять все переделывать? Или брать third party менюшки с CodeProject?

Посоветуйте плз.
Re[3]: как мне показать tooltip для элемента меню в status b
От: Кирилл Осенков Украина
Дата: 03.03.04 13:32
Оценка:
Сейчас почитал ссылку от Анонима об Extended Interface и [ProvideProperty(...)] — кажется, это ответ на мой вопрос. Щас будем пробовать
Re[4]: как мне показать tooltip для элемента меню в status b
От: Sinatr Германия  
Дата: 03.03.04 15:00
Оценка: 4 (1)
Привет!

Ну еще можно делать так — все типичные контролы (компоненты) вешаются на одно событие. В этом событии генериться уникальный индекс (я делаю строку — "ParentForm.Control") и через какой-то менеджер из ресурсов (или откуда еще) берется строка ассоциированная с этим индексом и текущим (или требуемым) языком. Просто..

К примеру, мне нужны подсказки для моих кнопок (которые показываются в тулбаре). Сначала я делаю свои кнопки, которые от стандартных отличаются только одним событием, оно срабатывает для OnMouseEnter и OnMouseLeave:

public class ButtonCHelpom : Button
{
  public delegate void HelpEventDelegate(string id);
  public event HelpEventDelegate HelpEvent = null;

  protected override void OnMouseEnter(EventArgs e)
  {
    if(HelpEvent != null) 
    {
      // ищем форму-"маму"
      Control ctrl = this;
      do 
      {
        ctrl = ctrl.Parent;
      } while(!(ctrl is Form));
      HelpEvent(ctrl.Name + "." + Name);
    }
    base.OnMouseEnter (e);
  }

  protected override void OnMouseLeave(EventArgs e)
  {
    if(HelpEvent != null) 
    HelpEvent(String.Empty);
    base.OnMouseLeave (e);
  }
}

Когда юзверь наведет мышу на кнопку — подписчик на событие получит "AnyParentForm.buttonCHelpom1", а когда уберет свою грязную.. мышу с кнопки — получится "".

Далее все мои кнопки, которые лежат на форме подписываются на такое к примеру (все кнопки — одно событие):
  private void buttonCHelpom_HelpEvent(string id)
  {
    statusBar.Text = Lng.Str(id);
  }

Тут Lng — это менеджер, который возвращает строку для текущего языка и указанного id.

Можно было бы обойтись без своего контрола, но т.к. форм много, то в каждой придется дублировать код для OnMouseEnter/Leave, так что проще делать конрол.
---
ПроГLамеры объединяйтесь..
Re[5]: как мне показать tooltip для элемента меню в status b
От: bobbisson Россия http://fuzzy.ru/
Дата: 03.03.04 20:01
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Привет!


S>Ну еще можно делать так — все типичные контролы (компоненты) вешаются на одно событие. В этом событии генериться уникальный индекс (я делаю строку — "ParentForm.Control") и через какой-то менеджер из ресурсов (или откуда еще) берется строка ассоциированная с этим индексом и текущим (или требуемым) языком. Просто..


... как все гениальное

я вообще-то год назад вопрос задавал, но все равно спасибо. кстати, заодно уж, а как над контролом tooltip всплывающий показать?
Re[6]: как мне показать tooltip для элемента меню в status b
От: Sinatr Германия  
Дата: 04.03.04 12:19
Оценка:
Привет!

B>я вообще-то год назад вопрос задавал, но все равно спасибо. кстати, заодно уж, а как над контролом tooltip всплывающий показать?


Насчет даты — я с большим трудом одупляюсь в каком году (просто 03 — это типа март и на 2003 похож совсем чуточку)..

Насчет тултипа — при смене текущего языка нужно выполнить нечто вроде:
private void Lng_OnLanguageChanged()
{
  toolTip.SetToolTip(button1, Lng.Str(this.Name + "." + button1.Name));
  toolTip.SetToolTip(button2, Lng.Str(this.Name + "." + button2.Name));
  // bla-bla-bla
  toolTip.SetToolTip(button999, Lng.Str(this.Name + "." + button999.Name));
}

Lng — это менеджер, у которого есть событие LanguageChanged. Еще есть метод Str, который получает нечто вроде "Form1.button1" и возвращает строчку для текущего языка и этого индекса. Подписываем форму на событие, в обработчике меняем тултипсы — вообщем все работает само..
---
ПроГLамеры объединяйтесь..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.