Nano Hash - криптовалюты, майнинг, программирование

Текст 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?


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

Ответы:


1

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

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

Посмотрите, работает ли это. Для меня это работает, хотя смысла в этом нет.

Четное:

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

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

layoutMenus.Width = layoutMenus.Width;

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

11.10.2009
  • Для меня, чтобы динамическая модификация пунктов меню работала, мне нужно было использовать комментарий Чин Лин вместе с вашим: menuItem.AutoSize = false; menuItem.AutoSize = true; menuItem.Width++; 02.11.2019

  • 2

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

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

    (Вызов SuspendLayout и ResumeLayout до и после добавления элементов не работал.)


    Обновление: реальная проблема может заключаться в том, что ToolStripButton добавляется к ContextMenuStrip, что обычно создает ToolStripMenuItem при вызове следующим образом:

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

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

    07.04.2014

    3

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

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

    Ссылка здесь

    02.08.2012
  • Добавление фиктивного элемента сработало для меня. dummy.Width должен быть установлен. Все выпадающие элементы будут такой ширины. 25.03.2015

  • 4

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

    29.11.2010
  • Вы имели в виду ContextMenuStrip.MaximumSize? 07.04.2014

  • 5

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

    И звонок ContextMenuStrip.PerformLayout исправил это для меня.

    08.05.2019

    6

    У меня похожая проблема. Я хочу добавить флажок в список пунктов меню. Для этого мне нужно добавить флажок в ToolStripControlHost, а затем добавить ToolStripControlHost в объект ToolStripMenuItem. Имя последнего флажка всегда усекается на 3 символа. Мое решение состоит в том, чтобы переключить AutoSize последнего хоста элемента, как показано ниже:

    Dim chkbox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
    chkbox.Text = "xxxxx"
    Dim tshost As ToolStripControlHost = New ToolStripControlHost(chkbox)
    tsmiAssemblySpecificTools.DropDownItems.Add(tshost)
                        tshost.AutoSize = False
                        tshost.AutoSize = True
    

    Переключатель AutoSize должен быть выполнен после добавления основного элемента в список.

    22.05.2019
  • Отключение и повторное включение автоматического размера помогло, но это работает только при первом рендеринге. Если я обновлю элементы контекстного меню позже и применю это же исправление, это не сработает. 02.11.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..