TabIndex для динамического создания

У меня есть несколько элементов управления, которые я создаю во время выполнения, а затем добавляю в какую-то форму контейнера (в моем случае панель). При создании элементов управления я также устанавливаю TabIndex для каждого из них. Теперь я начинаю с последнего элемента управления (текстовое поле № 4) и продвигаюсь вперед, чтобы первый элемент управления в конечном итоге оказался наверху. введите здесь описание изображения

Я принимаю во внимание, что я делаю это в обратном порядке при установке TabIndex, но когда я на самом деле запускаю код и нажимаю клавишу Tab, он всегда переходит от # 4 -> # 3 -> # 2 -> # 1 (в порядок их создания, а не сверху вниз, как хотелось бы). При отладке я вижу, что все элементы управления TabIndex установлены правильно (TextBox#1.TabIndex = 1,..., TextBox#4.TabIndex = 4). Я что-то упустил или есть обходной путь?

Код:

Panel pnl = new Panel();
(for int i = fields.Count -1; i <= 0; i--)
{
   Label lbl = new Label();
   //do some stuff with label
   lbl.TabIndex = (i + 1);
   pnl.Controls.Add(lbl);
}

person Code Vader    schedule 15.05.2015    source источник
comment
Я предполагаю, что i ‹= 0 опечатка? :) Установка TabIndex после добавления может сработать. Подозревается, что добавление его на панель перезаписывает его в вашем коде.   -  person Tony Hopkinson    schedule 15.05.2015


Ответы (1)


От: https://msdn.microsoft.com/en-us/library/bd16a8cw%28v=vs.80%29.aspx?f=255&MSPPError=-2147217396

По умолчанию первый нарисованный элемент управления имеет значение TabIndex, равное 0, второй имеет TabIndex, равное 1, и так далее.

Поэтому я могу только предположить, что ваш +1 неверен.

Panel pnl = new Panel();
(for int i = fields.Count -1; i <= 0; i--)
{
   Label lbl = new Label();
   //do some stuff with label
   lbl.TabIndex = i;
   pnl.Controls.Add(lbl);
}
person d347hm4n    schedule 15.05.2015