Почему я не могу добавить элементы управления в ac # из другого класса? - PullRequest
0 голосов
/ 25 декабря 2018

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

Это класс, который я хочу реализовать (класс Parents имеет класс List of Childно их не нужно показывать, потому что в отладке, которую я знаю, они распознаются. Heights и DefaultWidth являются статическими int в классе DropDownMenu)

[Serializable]
public class DropDownMenu
{
    public Button AddButton(string title, int height)
    {
        Button btn = new Button();
        btn.Text = title;
        btn.Size = new Size(DefaultWidth,height);
        return btn;
    }

    public FlowLayoutPanel AddDropDownLayoutPanel(int heightParent, int heightChilds, int numChilds)
    {
        FlowLayoutPanel flpDropDown = new FlowLayoutPanel
        {
            FlowDirection = FlowDirection.TopDown,
            MinimumSize = new Size(DefaultWidth, heightParent),
            MaximumSize = new Size(DefaultWidth, heightChilds*cantChilds)
        };
        return flpDropDown;
    }

    public FlowLayoutPanel AddDropDownButtons(int index, Point iniPos)
    {
        int numChilds = Parents[index].Childs.Count,
        minSizeP = numChilds*HeightChild,
        maxSizeP = minSizeP; //in this code I add more to this variable but right now is not really important

        FlowLayoutPanel flpDropDownP = AddDropDownLayoutPanel(HeightParent, HeightChild, numChilds);
        flpDropDownP.Location = iniPos;
        flpDropDownP.Tag = 1;
        flpDropDownP.Name = "flpParent" + index;

        Button p = AddButton(Parents[index].title, HeightParent);
        p.Name = String.Concat(isBtnParent, index);
        p.Location = new Point(0,0);
        p.Tag = 2;

        flpDropDownP.Controls.Add(p);
        flpDropDownP.MinimumSize = new Size(DefaultWidth, minSizeP);
        flpDropDownP.MaximumSize = new Size(DefaultWidth, maxSizeP);
        flpDropDownP.Size = flpDropDownP.MinimumSize;
        return flpDropDownP;
    }
}

И в форме, которую я вызываю для события загрузки:

private void FrmContainer_Load(object sender, EventArgs e)
    {
    DropDownMenu dropDownMenu = new DropDownMenu();
    List<Parent> parents = new List<Parent>();

    DropDownMenu.HeightParent = this.btnUsuario.Height;
    DropDownMenu.HeightChild = this.btnUsuario.Height - 2;

    try
    {
        List<Child> childs0 = new List<Child>
        {
            new Child{Id = "h0", Nombre = "Child 01"},
            new Child{Id = "h1", Nombre = "Child 02"}
        };
        parents.Add(new Parent{ Id = "p0", Nombre = "Parent 01", Childs = childs0 });
        parents.Add(new Parent{ Id = "p1", Nombre = "Parent 02", Childs= childs0 });

        dropDownMenu.Parents = parents;
        DropDownMenu.DefaultWidth = 128;

        Point iniBtnMenu = new Point(10, 20); //I have other numbers, but isn't really important here

        if (parents.Count != 0)
        {
            for (int index = 0; index < parents.Count; index++)
            {
                if (parents[index].Childs.Count != 0)
                {
                    this.Controls.Add(dropDownMenu.AddDropDownButtons(index, iniBtnMenu));
                }
                else
                {
                    Button n = dropDownMenu.AddButton(parents[index].Nombre, DropDownMenu.HeightParent);
                    n.Location = iniBtnMenu;
                    this.Controls.Add(n);
                }
                iniBtnMenu.X += DropDownMenu.DefaultWidth;
            }
        }
    }
catch (Exception ex)
{
}

}

Я думаю, что они, возможно, создаются за другими элементами формы, но опять же в Visual Studio, когда я смотрю на элементы управления, добавленные в форму, кнопки не отображаются.нет, так что я полагаю, что это не проблема.Я использую Visual Studio 2013 (но я не думаю, что это как-то связано с этим).Сначала я просто создаю кнопку без размера, местоположения или имени, но когда я проверил на Form1.Designer.cs, все элементы управления имеют их, поэтому я добавил их.


Итак, что я хочуэто выпадающее меню, которое зависит от списка объектов (который позже я могу заменить некоторыми данными из базы данных) и его дочерних элементов (например, меню и подменю).И я не использую элемент управления по умолчанию из Visual Studio, потому что я хочу изменить дизайн, и я не могу с этим элементом управления.

...