Какое свойство хранит элементы управления, содержащиеся в GroupBox? - PullRequest
0 голосов
/ 06 октября 2009

У меня есть элемент управления GroupBox, внутри которого есть набор элементов управления, но когда я использую свойство .Controls, он пуст.

Есть ли другое свойство, в котором хранятся эти элементы управления?

РЕДАКТИРОВАТЬ: Вот код группы:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace CustomControls
{
    public partial class CustomGroupBox : GroupBox
    {
        public CustomGroupBox ( )
        {
            this.OutlineColor = Color.FromArgb ( 5, 5, 5 );
            this.Font = new Font ( "Tahoma", 8.25F, FontStyle.Regular );
        }

        Color outlineColor;

        [DefaultValue ( typeof ( Color ), "5, 5, 5" )]
        public Color OutlineColor
        {
            get { return outlineColor; }
            set { outlineColor = value; Invalidate ( ); }
        }

        [DefaultValue ( typeof ( Font ), "Arial, 8.25pt" )]
        public override Font Font
        {
            get { return base.Font; }
            set { base.Font = value; }
        }

        protected override void OnPaint ( PaintEventArgs pe )
        {
            //painting
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 06 октября 2009

Я вижу, что свойство элементов управления заполнено в моих групповых окнах. Затем просто grpMyGroupBox.Controls.Item (index) .Name, чтобы получить имя элементов управления. Не имеет особого смысла, почему вы не увидите их там.

0 голосов
/ 06 октября 2009

Вы уверены, что элементы управления были добавлены во время проверки свойства? GroupBox хранит дочерние элементы управления в свойстве Controls, как и любой другой контейнерный элемент управления.

Редактировать

Я не могу начать размышлять о пользовательском контроле. Очевидно, что было бы возможно создать элемент управления с поведением, которое вы описываете, но я не могу понять причину этого. Простое создание примера проекта Windows Forms и перетаскивание в него двух кнопок и вызов MessageBox.Show(groupBox1.Controls.Count.ToString()) из другой кнопки дает 2, как и ожидалось.

Учитывая код, который вы выложили для GroupBox, я не вижу причин, чтобы это произошло, за исключением того, что элементы управления действительно отсутствуют в GroupBox. Если вы проверяете свойство Parent одного из элементов управления, какое это значение?

Редактировать 2

Если вы говорите, что у вас есть UserControl, который содержит ваш пользовательский GroupBox, и вы пытаетесь поместить UserControl в Form и поставить оттуда элементы управления insde GroupBox, тогда это не сработает. Дизайнер в форме только «знает» о UserControl; он не знает (или не заботится), что он содержит GroupBox (во-первых, конструктор не имеет доступа к этой переменной по умолчанию, как и вы, поскольку это private, если вы явно не измените модификатор ).

Чтобы сделать это в точности так, как вы хотите, вам придется сделать необходимый подъем, чтобы сделать ваш UserControl контейнером, но это нетривиальный объем работы , Я бы предложил просто разместить GroupBox на форме напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...