Невидимые дочерние элементы управления UserControl - PullRequest
0 голосов
/ 15 января 2019

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

Любой дочерний элемент управления, который вы прикрепляете к ToggleBox, не отображается во время выполнения. Но все же ToggleBox ведет себя так, как если бы он был там (AutoSizing, чтобы покрыть весь его невидимый контент). Я также пытался рисовать на нем фигуры и линии, просто чтобы посмотреть, работает ли он, но я не мог заставить его работать. Pics:

This is how the ToggleBox looks like in my custom designer

Вот так выглядит ToggleBox в моем конструкторе

This is how the ToggleBox looks like in the form designer, with children controls attached (they attach properly)

Вот так выглядит ToggleBox в конструкторе форм с прикрепленными дочерними элементами управления (они прикрепляются правильно)

This is the ToggleBox during runtime. Notice that it resized itself to fit it's contents

Это ToggleBox во время выполнения. Обратите внимание, что он изменил размер, чтобы соответствовать его содержимому

Код:

    [Designer(typeof(ToggleBoxDesigner))]
public partial class ToggleBox : UserControl
{
    Panel panel;
    Pen pen;
    [Description("The text of the toggleBox")]
    public string Text
    {
        get { return groupBox.Text; }
        set { groupBox.Text = value; }
    }
    public bool On
    {
        get { return on; }
        set { if (value) { AutoSize = true; } else { AutoSize = false; Height = 25; } on = value; }
    }
    private bool on;

    public ToggleBox()
    {
        panel = new Panel();
        InitializeComponent();
        Text = "ToggleBox";
        Height = 100;
        button.Click += Toggle;
        Load += (object sender, EventArgs a) => { On = true; };

    }
    public void Toggle(object sender, EventArgs a)
    {
        On = !On;
    }

}

Custom Designer

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    public class ToggleBoxDesigner : ParentControlDesigner
    {

        public override void Initialize(System.ComponentModel.IComponent component)
        {
            base.Initialize(component);

            if (this.Control is ToggleBox)
            {
                this.EnableDesignMode(
                   ((ToggleBox)this.Control).DropZone, "DropZone");
            }
        }


    }

Заранее спасибо!

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