Порядок средств управления в Свойстве элемента управления формы в C#

Ваш код правильно сформирован и компилируется без ошибок.


В качестве примечания вы можете удалить верхний уровень const в объявлении функции :

void Do_Some_String_Operation(const char* pString);

Этот верхний уровень const является функцией детали реализации и не должны попадать в его интерфейс. Вы можете добавить это const в определение функции .

5
задан 11 November 2008 в 10:33
поделиться

3 ответа

посмотрите на порядок, в котором они добавляются к форме в yourForm.designer.cs

3
ответ дан 18 December 2019 в 14:53
поделиться

при рассмотрении кода, сгенерированного разработчиком Form1.designer.cs, он будет выглядеть примерно так:

        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(658, 160);
        this.Controls.Add(this.flowLayoutPanel7);
        this.Controls.Add(this.flowLayoutPanel6);
        this.Controls.Add(this.flowLayoutPanel5);
        this.Controls.Add(this.flowLayoutPanel4);
        this.Controls.Add(this.flowLayoutPanel3);
        this.Controls.Add(this.flowLayoutPanel2);
        this.Controls.Add(this.flowLayoutPanel1);
        this.Name = "Form1";
        this.Text = "Form1";
        this.ResumeLayout(false);

отметьте, как это было создано, Вы добавили панель 1 сначала затем 2 и т.д., но поскольку код пробегает его, добавят 7 первых затем 6.

этот код будет в InitializeComponent () функцией, сгенерированной разработчиком.

Почему Вам нужны они для выполнения в определенном порядке?

Я не полагался бы на разработчика для хранения порядка, который Вы хотите.. я отсортировал бы средства управления мой сам:

        var flowpanelinOrder = from n in this.Controls.Cast<Control>()
                               where n is FlowLayoutPanel
                               orderby int.Parse(n.Tag.ToString())
                               select n;

        /* non linq
        List<Control> flowpanelinOrder = new List<Control>();
        foreach (Control c in this.Controls)
        {
            if (c is FlowLayoutPanel) flowpanelinOrder.Add(c);                
        }
        flowpanelinOrder.Sort();
         * */

        foreach (FlowLayoutPanel aDaysControl in flowpanelinOrder)
        {
            MessageBox.Show(aDaysControl.Tag.ToString());
        }
1
ответ дан 18 December 2019 в 14:53
поделиться

Это - действительно проблема?

Пока UI работает правильно (с точки зрения порядка вкладки, например), я рекомендовал бы не сделать предположения о порядке, в котором они перечисляются.

Править: Спасибо за объяснение Вашего требования более подробно. Я думаю, что все еще рекомендовал бы против использования порядка, что они хранятся в наборе Средств управления. Всегда лучше полагать, что эти детали реализации 'непрозрачны'. Вам связали тег с каждым управлением, таким образом, можно использовать это для идентификации корректного управления. Для ускорения обработки Вы могли создать массив с 7 элементами, который ссылается на средства управления ординалом:

FlowLayoutPanel[] panels = new FlowLayoutPanel[7];

foreach(FlowLayoutPanel panel in this.Controls)
{
    panels[(int)panel.Tag] = panel;
}

// Now, you can reference the panels directly by subscript:

panels[2].BackColor = Color.Aquamarine;

Хотя я поместил некоторую регистрацию типа для создания этого кода более устойчивым!

0
ответ дан 18 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: