Проблема в том, что эти свойства имеют побочный эффект . Это приведет к аннулированию элемента управления, который пытается перерисовать себя, но это не работает, потому что на самом деле мы находимся в конструкторе, и мы ничего не можем нарисовать. Таким образом, приводя к переключению обратно к предыдущему или значению по умолчанию (в зависимости от реализации конкретного элемента управления).
Чтобы это сработало, вам нужно внимательнее взглянуть на функцию InitializeComponent()
. Прежде чем начать устанавливать что-либо в элементах управления, он вызывает Control.SuspendLayout()
, а затем Control.ResumeLayout(false)
.
Вы должны делать то же самое, но не только на самом элементе управления, а также на всех родительских элементах управления (может быть, TableLayoutPanel или любом другом элементе управления контейнера), пока не достигнете вершины, вызвав this.SuspendLayout()
.
Также вы должны позаботиться о заказе. Приостановить от верхнего управления (это) до того, который вам нравится, и возобновить в обратном порядке. В случае стандартных элементов управления Windows это должно работать. Если вы используете какой-либо сторонний контроль, то поставщик должен позаботиться об этом.
Обновление
После прочтения ваших обновлений и комментариев я сделал новый проект и поместил TabControl с несколькими страницами. Также я поместил ComboBox на третью страницу и добавил некоторые элементы.
Затем я изменил свой код следующим образом:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
tabControl1.SelectedIndex = 1;
comboBox1.SelectedIndex = 2;
}
}
и работает как положено (без использования SuspendLayout()
или ResumeLayout()
).
Итак, чтобы действительно найти ошибку в вашем приложении, запустите новую пустую и начните заполнять ее существующим кодом или просто используйте подход OnLoad()
.