Не удается получить желаемую вкладку и форму для отображения при запуске

Пересматривающий вопрос, чтобы спросить, почему после нахождения нарушающей строки методом проб и ошибок. Подсказки из ответов предполагали, что что-то произошло после загрузки формы. Я нашел настройку строки tabControl1.SelectedIndex = 1; Индекс tabPage2 также равен 1, так почему он не выбрал tabPage2? После изменения 1 на 0 все отображается правильно.

Я не могу найти официальный документ или руководство по tabControl и использованию SelectedIndex, так что может кто-нибудь сказать мне, как это работает?

 private void Form1_Load(object sender, EventArgs e)
        {
            getRegions();
            tabControl1.SelectedIndex = 1;

У меня есть форма Windows, в которой было 10 tabPages на tabControl1. Изменение требований потребовало всех, кроме 2 и 8. Перед удалением любых tabPages, tabPage2 и формы, отображаемых при запуске. Я могу удалить 3,4,5,6,7,9,10 без проблем (осталось 1,2,8). Если я удалю tabPage1, tabPage и форма, отображаемая при запуске, будут tabPage8. Это была tabPage2, и я бы хотел, чтобы она оставалась такой.

Я играл с этим время от времени пару недель и был в тупике. Кажется, я не могу найти ни одной статьи или вопроса, описывающих это. Я обнаружил несколько предложений добавить this.tabControl1.SelectedTab = tabPage2; который, похоже, ничего не делает.

Что может быть причиной этого и что мне нужно делать? (действительно не знаю, какой код мне нужно вставить, дайте мне знать, если понадобится больше)

// tabControl1
            // 
            this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.tabControl1.Controls.Add(this.tabPage2);
            this.tabControl1.Controls.Add(this.tabPage8);
            this.tabControl1.Location = new System.Drawing.Point(13, 27);
            this.tabControl1.Name = "tabControl1";
            this.tabControl1.SelectedIndex = 1;
            this.tabControl1.Size = new System.Drawing.Size(963, 483);
            this.tabControl1.TabIndex = 1;
            this.tabControl1.SelectedTab = tabPage2;

        // tabPage1
        // 
        this.tabPage1.Location = new System.Drawing.Point(4, 22);
        this.tabPage1.Name = "tabPage1";
        this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
        this.tabPage1.Size = new System.Drawing.Size(955, 457);
        this.tabPage1.TabIndex = 0;
        this.tabPage1.Text = "Region Overall Status";
        this.tabPage1.UseVisualStyleBackColor = true;
        // 


        // tabPage2
        // 
        this.tabPage2.Controls.Add(this.lstBuildList);
        this.tabPage2.Controls.Add(this.label9);
        this.tabPage2.Controls.Add(this.label8);
        this.tabPage2.Controls.Add(this.lblFileLookUp);
        this.tabPage2.Controls.Add(this.btnFileLookUp);
        this.tabPage2.Controls.Add(this.cbRegion);
        this.tabPage2.Controls.Add(this.tabControl2);
        this.tabPage2.Controls.Add(this.tvFileMan);
        this.tabPage2.Controls.Add(this.txtFileLookUp);
        this.tabPage2.Controls.Add(this.cbRegionSites);
        this.tabPage2.Location = new System.Drawing.Point(4, 22);
        this.tabPage2.Name = "tabPage2";
        this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
        this.tabPage2.Size = new System.Drawing.Size(955, 457);
        this.tabPage2.TabIndex = 1;
        this.tabPage2.Text = "Build Attribute Maps from Vista Files";
        this.tabPage2.UseVisualStyleBackColor = true;
        this.tabPage2.Click += new System.EventHandler(this.tabPage2_Click);



        // tabPage8
        // 
        this.tabPage8.Location = new System.Drawing.Point(4, 22);
        this.tabPage8.Name = "tabPage8";
        this.tabPage8.Padding = new System.Windows.Forms.Padding(3);
        this.tabPage8.Size = new System.Drawing.Size(955, 457);
        this.tabPage8.TabIndex = 0;
        this.tabPage8.Text = "Edit Attribute Map/ Create SQL Tables from Attribute Map";
        this.tabPage8.UseVisualStyleBackColor = true;
        this.tabPage8.Click += new System.EventHandler(this.tabPage8_Click);
        this.tabControl1.SelectedTab = tabPage2;
        // 

person Thom Ash    schedule 16.12.2014    source источник


Ответы (2)


Вы можете выбрать вкладку после InitializeComponent или в Form_Load для отображения при запуске.

Вот пример кода, который я тестировал

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //Select tabpage after initialize
            tabControl1.SelectedTab = tabPage3;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //You can select it at form load or at some other action also like a button click
            //tabControl1.SelectedTab = tabPage3;
        }
    }
}

Не пишите код своему дизайнеру. Всегда пишите после вызова InitializeComponent.

person prem    schedule 16.12.2014
comment
вот почти что и было сделано. Создатель проекта вставил это после компонента инициализации. Что меня смущает, так это то, что tabPage2 действительно имеет индекс 1. Я установил его на 0, и все запускается правильно. частный void Form1_Load (отправитель объекта, EventArgs e) {getRegions (); tabControl1.SelectedIndex = 1; - person Thom Ash; 16.12.2014

Прежде всего, остерегайтесь конструктора Windows Forms Designer, потому что он очень часто подбирает изменения, которых вы не ожидали при внесении изменений. :)

Вы можете попробовать переместить this.tabControl1.SelectedTab за пределы вашего метода InitializeComponent (я предполагаю, что он у вас есть). Иногда вызовы BeginInit / EndInit имеют странные побочные эффекты.

person HenrikJohnson    schedule 16.12.2014