Я пытаюсь создать контейнерный элемент управления, который вы могли бы «свернуть» (получить очень маленький и ничего не отображать) и «развернуть» (охватывает весь его контент), нажав переключатель. Я называю это ToggleBox. Я уже сделал так, чтобы он вел себя как контейнер, и я реализовал функцию переключения, но теперь я столкнулся с трудной проблемой.
Любой дочерний элемент управления, который вы прикрепляете к ToggleBox, не отображается во время выполнения. Но все же ToggleBox ведет себя так, как если бы он был там (AutoSizing, чтобы покрыть весь его невидимый контент). Я также пытался рисовать на нем фигуры и линии, просто чтобы посмотреть, работает ли он, но я не мог заставить его работать. Pics:
Вот так выглядит ToggleBox в моем конструкторе
Вот так выглядит ToggleBox в конструкторе форм с прикрепленными дочерними элементами управления (они прикрепляются правильно)
Это 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");
}
}
}
Заранее спасибо!