сразу скажу, что разрабатываю я многоязычный софт. поэтому для загрузки строковых констант надо использовать 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?
B>вот и получается, что единственный способ выводить подсказки пользователю — это писать свои функции для каждого элемениа меню, что согласитесь, геморройно.
Если так, с нахрапа, то забивай подсказки в Tag. А в OnSelect выводи этот Tag на StatusBar. Может и поумнее метод есть, но для сельской местности покатит
... << RSDN@Home 1.0 beta 6a >>
Re[2]: как мне показать tooltip для элемента меню в status b
Здравствуйте, 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
Ну еще можно делать так — все типичные контролы (компоненты) вешаются на одно событие. В этом событии генериться уникальный индекс (я делаю строку — "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", а когда уберет свою грязную.. мышу с кнопки — получится "".
Далее все мои кнопки, которые лежат на форме подписываются на такое к примеру (все кнопки — одно событие):
Тут Lng — это менеджер, который возвращает строку для текущего языка и указанного id.
Можно было бы обойтись без своего контрола, но т.к. форм много, то в каждой придется дублировать код для OnMouseEnter/Leave, так что проще делать конрол.
---
ПроГLамеры объединяйтесь..
Re[5]: как мне показать tooltip для элемента меню в status b
Здравствуйте, Sinatr, Вы писали:
S>Привет!
S>Ну еще можно делать так — все типичные контролы (компоненты) вешаются на одно событие. В этом событии генериться уникальный индекс (я делаю строку — "ParentForm.Control") и через какой-то менеджер из ресурсов (или откуда еще) берется строка ассоциированная с этим индексом и текущим (или требуемым) языком. Просто..
... как все гениальное
я вообще-то год назад вопрос задавал, но все равно спасибо. кстати, заодно уж, а как над контролом tooltip всплывающий показать?
Re[6]: как мне показать tooltip для элемента меню в status b
Lng — это менеджер, у которого есть событие LanguageChanged. Еще есть метод Str, который получает нечто вроде "Form1.button1" и возвращает строчку для текущего языка и этого индекса. Подписываем форму на событие, в обработчике меняем тултипсы — вообщем все работает само..