Как удалить LinkLabel в качестве табуляции при использовании .NET 3.5?

1

Когда пользователь переходит через поля, они должны перейти через LinkLabel, чтобы перейти к следующему полю. Я бы предпочел, чтобы они переходили прямо из поля в поле, не останавливаясь на LinkLabel. Однако в.NET 3.5 LinkLabel не имеет свойства TabStop для установки равным false. Обновление до.NET 4.0 или.NET 4.5 сегодня не является вариантом.

Я пробовал два других возможных способа пропустить LinkLabel, которые не работают.

  1. Поместите LinkLabel на панель и установите для свойства TabStop на панели значение false. LinkLabel по-прежнему получает вкладку.

  2. Обработайте событие Enter в LinkLabel и используйте SendKeys или какую-то такую глупость, чтобы перейти к следующему элементу управления. Это не работает, потому что это приводит к остановке события Click.

Я также рассмотрел возможность установки TabIndex для всех LinkLabels в форме гораздо более высокой, чем остальные элементы управления. Однако это не сработает

Каждое поле представляет собой TextBox или ComboBox на панели с меткой. Поля ComboBox имеют дополнительный контроль над панелью с ними: LinkLabel, который говорит "Редактировать элементы". Каждый из этих панелей находится на главной панели FlowLayoutPanel.

Поправьте меня если я ошибаюсь. Как я понимаю, порядок элементов управления на вложенных панелях заключается в том, что каждая панель будет иметь свой собственный порядок вкладок. Затем порядок вкладок каждого из них объединяется последовательно на основе TabIndex каждой панели, чтобы определить эффективный порядок вкладок элементов управления в форме. Правильно? Поэтому настройка TabIndex каждого LinkLabel на число в высоких 200-х годах не будет исправлять исходную проблему, как я ее вижу.

Кто-нибудь видел этот вызов раньше? Как вы его решили? Я чувствую, что мне, возможно, придется сделать что-то решительное, как подкласс класса LinkLabel. Что бы вы сделали?

Теги:
winforms
.net-3.5
linklabel

2 ответа

7
Лучший ответ

Это была ошибка, LinkLabel наследует от Label, которая не имеет значимой поддержки для фокусировки. Таким образом, свойство скрывается в окне "Свойства", как и для "Ярлык". .NET 4.0 исправил эту ошибку.

Это не настоящая проблема, свойство все еще доступно. Просто установите его в коде вместо:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        linkLabel1.TabStop = false;
    }
    // etc..
}

Обратите внимание, что свойство также скрыто для IntelliSense, поэтому не удивляйтесь, что вы не получите помощь.

  • 0
    Это потрясающе. Вот почему я люблю stackoverflow. Спасибо.
1

С LinkLabel мы должны установить свойство TabStop по коду, не можем установить путем изменения свойств Windows.

Когда VisualStudio генерирует код из GUI, он делает следующее:

this.linkbThread.TabIndex = 31;        //first
this.linkbThread.Text = "My URL";      //second

Но MSDN сказал:

"Однако имейте в виду, что добавление новых ссылок на коллекцию Links автоматически добавит свойство TabStop в true."

Поэтому, если мы изменим свойство TabStop в свойствах Windows или вставим код linkbThread.TabStop = false перед назначением linkbThread.Text = "Мой URL", он не работает.

  • 0
    Спасибо, хороший улов!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню