visual studio proyectos programacion instalar form aparece agregar c# .net winforms visual-studio windows-forms-designer

c# - proyectos - windows forms c++ visual studio 2017



¿Mostrar controles agregados programáticamente en la aplicación WinForms en la vista Diseño? (1)

¿El diseñador ejecuta mi código?

Cuando se muestra un formulario en el diseñador, el diseñador deserializa el código de su formulario (Form1.Designer.cs o first class en Form1.cs) y crea una instancia de la clase base de su formulario y deserializa InitializeComponent y crea los controles que usted declaró en su clase y establecer sus propiedades.

Entonces los códigos en Constructor no se ejecutarán. El diseñador solo crea una instancia de la clase base de su formulario y no busca en el constructor de su formulario.

Un ejemplo interesante de cómo funciona el diseñador

Mire el código a continuación y preste atención a estos problemas:

  • Dónde están ; s?
  • Constructor Form111111 para Form1 ?
  • ¿Qué es NotDefinedFunction() ?
  • ¿Cómo puede int i = "xxxxxxxxxx" ?

Incluso si crea dicho archivo, el diseñador se mostrará correctamente.

using System using System.Collections.Generic using System.Drawing using System.Windows.Forms namespace Sample { public class Form1:Form { public Form111111() { NotDefinedFunction() InitializeComponent() } public void InitializeComponent() { int i = "xxxxxxxxxx" this.textBox1 = new System.Windows.Forms.TextBox() this.SuspendLayout() // // textBox1 // this.textBox1.Location = new System.Drawing.Point(0, 0) this.textBox1.Name = "textBox1" this.textBox1.Text = "text of text box 1"; // // Form1 // this.Controls.Add(this.textBox1) this.Name = "Form1" this.Text = "Form1" this.Size= new Size(250,100) this.ResumeLayout(false) this.PerformLayout() } private TextBox textBox1 } }

Y verá el formulario en el diseñador:

¿Cómo puedo agregar controles dinámicamente en el momento del diseño?

Si necesita dicha funcionalidad, puede crear sus controles dinámicos en el constructor de una clase base para su formulario, ya que el constructor de la clase base se ejecutará cuando abra un formulario secundario en el diseñador, y luego se ejecutará en el momento del diseño.

Pero debe saber que estos controles son heredados y no se pueden cambiar utilizando el diseñador de formulario secundario.

Así que simplemente crea un Form2:

public Form2() { InitializeComponent(); AddDynamicControls(); } private void AddDynamicControls() { this.Controls.Add( new TextBox() { Name = "TextBox1", Text = "Dynamic", Location = new Point(100, 0) }); }

Cree el proyecto y luego cambie la clase base de Form1 para heredar desde Form2 :

public class Form1:Form2

Y el resultado será:

hay alguna otra solucion?

Si desea generar algunos controles realmente en el momento del diseño, creo que debería echar un vistazo a las plantillas de texto T4 .

Puede usar plantillas t4 para generar código en tiempo de diseño. Probablemente haya visto los archivos de plantilla .tt Entity Framework. Puede agregar un nuevo elemento Text Template a su proyecto y poner la lógica para generar elementos en tiempo de diseño en su plantilla t4.

Al usar Visual Studio (cualquier versión funcionará), ¿es posible agregar controles programáticamente (en lugar de a través de la vista Diseño) para que luego se muestren al volver a la vista Diseño?

Probé algo ridículamente simple como:

public Form1() { AddCtrl(); InitializeComponent(); AddCtrl(); } private void AddCtrl() { this.SuspendLayout(); this.Controls.Add(new TextBox()); this.ResumeLayout(false); this.PerformLayout(); }

...pero fue en vano.

Aunque estoy seguro de que esto se ha preguntado antes, ya que parece una pregunta común, parece que no puedo encontrar una respuesta.