Управление ярлыками в .net

Я использую VB 2008 Express, но это, вероятно, относится ко всем средам .net.

Мой вопрос касается ярлыков, которые ничего не делают. Никаких событий, и их текст никогда не меняется. Они просто сидят над текстовыми полями и другими штуковинами, чтобы пользователь знал, для чего предназначена каждая штука. Это вся их работа. Простой. Никакого кода. (Кроме кода, написанного дизайнером формы.)

Моя проблема в том, что их чертовски МНОГО! В моем приложении есть несколько вкладок в одной и той же форме, и каждая вкладка имеет множество объектов, и у каждой есть связанная метка. Поскольку я никогда не удосужился назвать их, теперь у меня есть лейбл с именем Label224. Правильно, 224 этикетки! Это становится смешно. Когда я просматриваю окно свойств, иногда я хочу выбрать объект по имени, используя раскрывающийся список, и они заставляют много прокручивать.

ВОПРОС: Есть ли способ сделать огромное количество безымянных меток (или любого типа объекта, на который нет ссылок в коде) менее навязчивым во время разработки?

Конечно, я мог бы загрузить их в коде. Это было бы хорошо, но было бы неплохо расположить их графически без проб и ошибок запуска кода, чтобы увидеть, правильное ли позиционирование.


person PaulOTron2000    schedule 18.01.2012    source источник


Ответы (2)


Несколько вещей.

Задайте для свойства GenerateMember каждой метки значение false:

label1.GenerateMember = False

Это предотвратит появление метки в полях со списком представления кода и intellisense.

Кроме того, у вас просто слишком много элементов управления.

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

Другая «работа» метки — обеспечить мнемоническую активацию элемента управления для следующего элемента управления в порядке табуляции. Если вы не используете это, вы можете попробовать «обмануть» и избавиться от меток вместе, а также «нарисовать» метку рядом с каждым элементом управления в событии рисования контейнера. Вы можете поместить отображение метки в свойство тега элемента управления и рисовать на нем. Не обязательно самое лучшее предложение.

Пример:

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
  For Each c As Control In Me.Controls
    If c.Tag IsNot Nothing Then
      TextRenderer.DrawText(e.Graphics, c.Tag.ToString, Me.Font, _
                            New Rectangle(c.Left - 100, c.Top, 100, c.Height), _
                            Color.Black, Color.Empty, TextFormatFlags.VerticalCenter)
    End If
  Next
End Sub
person LarsTech    schedule 18.01.2012
comment
GenerateMember — мой ответ. Хотите верьте, хотите нет, я понятия не имел, что это делает. Спасибо, теперь я также узнал о свойстве Modifiers. Я самоучка в .NET (пришел из VB6) и каждый день узнаю больше. - person PaulOTron2000; 19.01.2012

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

введите здесь описание изображения

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

Это также означает, что вы можете создавать новые формы быстрее, потому что у вас есть только один элемент управления для добавления в каждое поле редактирования вместо двух.

Вот еще один пример пользовательского элемента управления, который у меня есть — это всего две метки, но принцип тот же:

введите здесь описание изображения

Здесь он используется несколько раз в одной форме:

введите здесь описание изображения

Вместо 18 меток на форме у меня есть 9 экземпляров пользовательского элемента управления.

person Igby Largeman    schedule 18.01.2012
comment
Кажется, я припоминаю, что LOOOOONG время назад ранняя версия MS Access позволяла разработчику ассоциировать метки с текстовыми полями в такой форме, при этом метка по умолчанию использовала имя поля базы данных, с которым было связано текстовое поле. Многое в Access было нежелательным, но эта функция имела смысл. - person PaulOTron2000; 19.01.2012
comment
У меня есть ощущение, что у VB могло быть то же самое. Но я не использовал VB в течение 15 или более лет, так что я мог представить это. - person Igby Largeman; 19.01.2012
comment
Нет, если только это не было в VB1. Я пропустил VB1, но использовал все версии от VB2 до VB6. (Начиная с GW Basic, затем QuickBasic, который был довольно впечатляющим в свое время.) О боже, я стар! И я думаю, вы могли бы сказать, что я довольно простой. - person PaulOTron2000; 19.01.2012
comment
Я предполагаю, что тогда я воображал это, потому что я думаю, что VB 2 или 3 были первыми, которые я использовал. Однако я, возможно, использовал Access. Или я, может быть, немного старческий. - person Igby Largeman; 19.01.2012