Всем привет и заранее спасибо. Я создал пользовательский элемент управления с именем PanelOption, который представляет собой панель с флажком и текстовым полем, и они находятся внутри FlowPanelLayOut. Он работает хорошо, и все работает отлично.
Проблема возникает, когда я изменяю форму, в которой находятся эти PanelOption. Они исчезают из метода InitializeComponent, как показано ниже:
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CrearMultipleForm));
this.txtEnunciado = new System.Windows.Forms.TextBox();
this.txtPuntaje = new System.Windows.Forms.TextBox();
this.lblPuntaje = new System.Windows.Forms.Label();
this.lbNumPreg = new System.Windows.Forms.Label();
this.FlowPanelOpciones = new System.Windows.Forms.FlowLayoutPanel();
this.panelOptionSM1 = new Custom_Components.PanelOption('A');
this.panelOptionSM2 = new Custom_Components.PanelOption('C');
this.panelOptionSM3 = new Custom_Components.PanelOption('B');
this.panelOptionSM4 = new Custom_Components.PanelOption('D');
this.panel2 = new System.Windows.Forms.Panel();
this.botonMinus = new QuizifyIU.Controles_Personalizados.Boton();
this.botonPlus = new QuizifyIU.Controles_Personalizados.Boton();
this.btnCrear = new QuizifyIU.Controles_Personalizados.Boton();
this.btnCancelar = new QuizifyIU.Controles_Personalizados.Boton();
this.btnRespAbierta = new QuizifyIU.Controles_Personalizados.Boton();
this.btnVF = new QuizifyIU.Controles_Personalizados.Boton();
this.btnMultiple = new QuizifyIU.Controles_Personalizados.Boton();
this.flowLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.FlowPanelOpciones.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
Здесь вы можете увидеть создание экземпляров объектов panelOptionSM1, panelOptionSM2... . Но, как я уже сказал, когда я изменяю форму в дизайнере, Visual Studio удаляет создание объектов следующим образом:
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CrearMultipleForm));
this.txtEnunciado = new System.Windows.Forms.TextBox();
this.txtPuntaje = new System.Windows.Forms.TextBox();
this.lblPuntaje = new System.Windows.Forms.Label();
this.lbNumPreg = new System.Windows.Forms.Label();
this.FlowPanelOpciones = new System.Windows.Forms.FlowLayoutPanel();
this.panel2 = new System.Windows.Forms.Panel();
this.botonMinus = new QuizifyIU.Controles_Personalizados.Boton();
this.botonPlus = new QuizifyIU.Controles_Personalizados.Boton();
this.btnCrear = new QuizifyIU.Controles_Personalizados.Boton();
this.btnCancelar = new QuizifyIU.Controles_Personalizados.Boton();
this.btnRespAbierta = new QuizifyIU.Controles_Personalizados.Boton();
this.btnVF = new QuizifyIU.Controles_Personalizados.Boton();
this.btnMultiple = new QuizifyIU.Controles_Personalizados.Boton();
this.flowLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.FlowPanelOpciones.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
Самое смешное, что остальной код, относящийся к этим объектам, остается нетронутым независимо от изменения формы. Остальная часть кода, на который я ссылаюсь:
// panelOpcionSM1
//
this.panelOptionSM1.BackColor = System.Drawing.Color.Transparent;
this.panelOptionSM1.Location = new System.Drawing.Point(3, 3);
this.panelOptionSM1.Name = "panelOpcionSM1";
this.panelOptionSM1.Size = new System.Drawing.Size(520, 48);
this.panelOptionSM1.TabIndex = 110;
//
// panelOpcionSM4
//
this.panelOptionSM4.BackColor = System.Drawing.Color.Transparent;
this.panelOptionSM4.Location = new System.Drawing.Point(3, 57);
this.panelOptionSM4.Name = "panelOpcionSM4";
this.panelOptionSM4.Size = new System.Drawing.Size(520, 48);
this.panelOptionSM4.TabIndex = 112;
//
// panelOpcionSM2
//
this.panelOptionSM2.BackColor = System.Drawing.Color.Transparent;
this.panelOptionSM2.Location = new System.Drawing.Point(3, 111);
this.panelOptionSM2.Name = "panelOpcionSM2";
this.panelOptionSM2.Size = new System.Drawing.Size(520, 48);
this.panelOptionSM2.TabIndex = 111;
//
// panelOpcionSM3
//
this.panelOptionSM3.BackColor = System.Drawing.Color.Transparent;
this.panelOptionSM3.Location = new System.Drawing.Point(3, 165);
this.panelOptionSM3.Name = "panelOpcionSM3";
this.panelOptionSM3.Size = new System.Drawing.Size(525, 48);
this.panelOptionSM3.TabIndex = 109;
А также:
private Custom_Components.PanelOption panelOptionSM3;
private Custom_Components.PanelOption panelOptionSM1;
private Custom_Components.PanelOption panelOptionSM4;
private Custom_Components.PanelOption panelOptionSM2;
Это происходит только тогда, когда я изменяю форму, а не когда я перестраиваю решение или изменяю код формы.
Вы добавили эти строки вручную в InitializeComponent
? Кажется, вы инициализируете PanelOption
параметризованным конструктором. Если у него нет конструктора по умолчанию, то без реализации кастомного CodeDomSerializer
дизайнер не будет знать, как перегенерировать код инициализации для такого компонента при изменении формы.
Самое простое решение — добавить общедоступный конструктор по умолчанию в PanelOption
и превратить исходный параметр конструктора в общедоступное свойство. Кроме того, вы можете добавить эти панели в форму вручную, вне метода InitializeComponent
(в этом случае они не будут отображаться в дизайнере).