Когда пользователь переходит через поля, они должны перейти через LinkLabel, чтобы перейти к следующему полю. Я бы предпочел, чтобы они переходили прямо из поля в поле, не останавливаясь на LinkLabel. Однако в.NET 3.5 LinkLabel не имеет свойства TabStop для установки равным false. Обновление до.NET 4.0 или.NET 4.5 сегодня не является вариантом.
Я пробовал два других возможных способа пропустить LinkLabel, которые не работают.
Поместите LinkLabel на панель и установите для свойства TabStop на панели значение false. LinkLabel по-прежнему получает вкладку.
Обработайте событие Enter в LinkLabel и используйте SendKeys или какую-то такую глупость, чтобы перейти к следующему элементу управления. Это не работает, потому что это приводит к остановке события Click.
Я также рассмотрел возможность установки TabIndex для всех LinkLabels в форме гораздо более высокой, чем остальные элементы управления. Однако это не сработает
Каждое поле представляет собой TextBox или ComboBox на панели с меткой. Поля ComboBox имеют дополнительный контроль над панелью с ними: LinkLabel, который говорит "Редактировать элементы". Каждый из этих панелей находится на главной панели FlowLayoutPanel.
Поправьте меня если я ошибаюсь. Как я понимаю, порядок элементов управления на вложенных панелях заключается в том, что каждая панель будет иметь свой собственный порядок вкладок. Затем порядок вкладок каждого из них объединяется последовательно на основе TabIndex каждой панели, чтобы определить эффективный порядок вкладок элементов управления в форме. Правильно? Поэтому настройка TabIndex каждого LinkLabel на число в высоких 200-х годах не будет исправлять исходную проблему, как я ее вижу.
Кто-нибудь видел этот вызов раньше? Как вы его решили? Я чувствую, что мне, возможно, придется сделать что-то решительное, как подкласс класса LinkLabel. Что бы вы сделали?
Это была ошибка, LinkLabel наследует от Label, которая не имеет значимой поддержки для фокусировки. Таким образом, свойство скрывается в окне "Свойства", как и для "Ярлык". .NET 4.0 исправил эту ошибку.
Это не настоящая проблема, свойство все еще доступно. Просто установите его в коде вместо:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
linkLabel1.TabStop = false;
}
// etc..
}
Обратите внимание, что свойство также скрыто для IntelliSense, поэтому не удивляйтесь, что вы не получите помощь.
С 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", он не работает.