2009-10-11 3 views
3

Я создаю свой собственный ToolStripButton и добавлю его в ContextMenuStrip. Она выскакивает, но текст становится отрезан:Текст ToolStripButton отключается в ContextMenuStrip

string[] layouts = new string[]{"Test 1", "Test 2", "Test 3"}; 
List<ToolStripButton> items = new List<ToolStripButton>(); 
foreach (string layout in layouts) 
{ 
    ToolStripButton item = new ToolStripButton(layout, image, LayoutClicked); 
    item.AutoSize = true; 
    items.Add(item); 
} 
layoutMenus.Items.Clear(); 
layoutMenus.Items.AddRange(items.ToArray()); 
layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y); 

Любая идея, почему текст становится отрезан как AutoSize собственности true?

+0

В моем случае я мог бы заменить 'ToolStripButton'' ToolStripMenuItem' для решения проблемы. –

ответ

2

Любопытный; Я могу воспроизвести это ... а REALL странность (для меня) в том, что меню настройки, в .Width фиксирует это ... но установка его ни к чему (это, кажется, игнорировать значение полностью):

layoutMenus.Width = 800; // could be 20, or 100 and would appear the same 

См если это работает. Это для меня, даже если это не имеет никакого смысла.

Даже:

layoutMenus.Width++; 
layoutMenus.Width--; 

оставляет достаточно места, но

layoutMenus.Width = layoutMenus.Width; 

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

1

У меня такая же проблема. Пробовал все это, и оказалось, что MaxSize установлен по ошибке, как (200, 0). Сбросьте его до (0,0) устраните проблему.

+0

Возможно, вы имели в виду 'ContextMenuStrip.MaximumSize'? – CodeFox

1

2 года спустя я столкнулся с той же проблемой. У меня не было набора MaxSize, и прикосновение к свойству Width тоже не помогло. Мой ContextMenuStrip содержал только один элемент - кнопку с серым цветом, в которой говорилось «Не поддерживается». Он был усечен до «Не Supp».

В итоге мне пришлось добавить фиктивный элемент в конец ContextMenuStrip и установить его видимость на False. Затем ContextMenuStrip был достаточно широким, чтобы показать первый элемент, который мне действительно нравился.

Ссылка here

+0

Добавление фиктивного элемента для меня. 'dummy.Width' должен быть установлен. Все выпадающие элементы будут иметь такую ​​ширину. – Boogier

2

После некоторого рефакторинга реализации ранее рабочего контекстного меню, я столкнулась с той же проблемой. Как @PeteBaughman, я не смог исправить это, изменив ContextMenuStrip.Width - ширина фактически не изменилась (также ContextMenuStrip.MaximumSize не был указан: (0,0)).

Добавление невидимого предмета, как предложил Пит, сделал трюк. После нескольких экспериментов я нашел еще одно решение:: Призыв к ContextMenuStrip.PerformLayout() привел к ожидаемому поведению.

ResumeLayout до и после добавления элементов не работает.)


Update: Реальная проблема может быть, что ToolStripButton добавляют к ContextMenuStrip, которые обычно создают ToolStripMenuItem, когда называется так:

contextMenuStrip.Items.Add("Hello world"); // Returns a ToolStripMenuItem 

Я был в состоянии опустить позвоните по номеру PerformLayout() после создания предметов подходящего типа.

Смежные вопросы