Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

245
Vistas
Fragmento de código dinámico C# Visual Studio

Estoy trabajando en un proyecto de WinForms con algunas tareas repetitivas todos los días. Así que pensé que crear un fragmento de código me ayudaría, pero solo funciona para código fijo.

Quiero crear dinámicamente un fragmento de código, de acuerdo con los nombres de control y alguna condición.

Quiero agregar el código una vez que la parte del diseño esté lista. Defino los nombres de control como intTextboxAge . El fragmento debe agregar validación automática para todos los cuadros de texto, utilizando la función definida a continuación.

Tiene que haber diferentes controles basados en el prefijo del nombre del control (int, str, dou, dec). Como tal:

 public void AutoCode() { int i=0; foreach(On all controls) { if(controls is textbox or combobox) { if(control.text starts with int) { a[i] = Validation.ValidateInt(labelError, control.text, val => acdnt.date = val); } } } }

Quiero un fragmento de código generado automáticamente, las bibliotecas no podrán ayudarme.

Mi motivo no es generar código para la validación solo con el ejemplo anterior, es cómo podemos hacer esto.

Quiero generar automáticamente mi código de lógica comercial para formularios maestros ganadores como

  1. Validación
  2. Creando nueva clase para variables
  3. Relleno de datos en clase después de la validación.
  4. Creación automática de inserción y actualización de función de base de datos

Debido a que en todas las tareas anteriores, solo los cambios de nombre de variable restan tareas comerciales. Cómo podemos implementar

Creación automática de clase: la clase se creará con el nombre del formulario + "Clase" y los tipos de variables se identificarán con los primeros 3 caracteres y se nombrarán igual que el nombre del control.

Creación automática de la función de inserción y actualización de la base de datos: nombrará el nombre de la tabla de la base de datos igual que el nombre del formulario y el nombre de la columna igual que el nombre del control, de modo que también pueda crear dinámicamente consultas de inserción y actualización.

Por qué no quiero con la biblioteca de clases porque en ese caso realiza todas las operaciones en tiempo de ejecución, lo que en algún lugar consumirá mi rendimiento.

Con esto podemos ahorrar mucho tiempo y esfuerzos del mundo de la codificación.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Quiero agregar el código una vez que la parte del diseño esté lista. Defino los nombres de control como intTextboxAge. El fragmento debe agregar validación automática para todos los cuadros de texto, utilizando la función definida a continuación.

Sería mejor tener CustomControls con su propia Validación, de esta manera no necesita agregar código después de que se realiza la parte de diseño:

ingrese la descripción de la imagen aquí

 //Integer input CustomControl with validation label (pictured above) public partial class intTextBox : UserControl { public bool IsValid {get;set;} public intTextBox() { InitializeComponent(); this.textBox1.TextChanged += this.intTextBox_TextChanged; } private void intTextBox_TextChanged(object sender, EventArgs e) { int n; IsValid = int.TryParse(this.textBox1.Text, out n); label1.Visible = !IsValid; } }

Tiene que haber diferentes controles basados en el prefijo del nombre del control (int, str, dou, dec)

Si bien puede usar prefijos de nombre de control, le recomiendo que cree sus propios controles de usuario derivando controles de la base y simplemente probando el tipo de control:

 //Decimal input UserControl public class decTextBox : TextBox { public string Text { get { return this.Text; } } public bool IsValid() { decimal n; bool isDecimal = decimal.TryParse(this.Text, out n); return isDecimal; } }

....

 public Control AutoCode(Control forEgTheForm) { //Tip: You may need to recursively call this function to check children controls are valid foreach(var ctrl in forEgTheForm.Controls) { if(ctrl is TextBoxBase) { if(ctrl is decTextBox) { decTextBox txt = ((decTextBox)ctrl); //If its not a valid value then set a[i]=true/false or in this example return the control... if (!txt.IsValid()) return ctrl; } } } }

Quiero crear dinámicamente un fragmento de código, de acuerdo con los nombres de control y alguna condición.

Si va a crear fragmentos de código, hágalo de acuerdo con los tipos de control, no con el prefijo del nombre de control, por lo que no necesita que sean dinámicos.

...


Sería aún más elegante no tener que escribir ningún Snippets o código de validación. Esta es la solución ideal. Recomiendo hacer esto usando el tipo correcto de controles.

Los cuadros de texto son buenos para cadenas, sin embargo, para int, dec y dbl, es mejor usar el control NumericUpDown. De esta manera, los usuarios sabrán intuitivamente que necesitan ingresar números (y no podrán ingresar caracteres alfanuméricos). Después de configurar un par de propiedades de control NumericUpDown (ya sea en tiempo de diseño o en tiempo de ejecución), no necesitará codificar en la validación:

ingrese la descripción de la imagen aquí


No estoy seguro de la causa de la degradación del rendimiento que está experimentando. Aunque le sugiero que vincule los controles a una clase en una biblioteca de clases con toda la lógica comercial para que pueda realizar una prueba unitaria. Para la validación de front-end, aunque la simple validación de las entradas es correcta, como se muestra arriba, es el camino a seguir.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede probar generadores de código basados en scripts como CodeSmith (también hay algo gratuito).
Puede escribir su secuencia de comandos en función de las variables que defina (también en función de los elementos de la base de datos) y luego generar el código.
Generar código es un buen enfoque porque ahorra tiempo pero también estandariza el código.

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que puede usar el espacio de nombres System.Reflection combinado con el espacio de nombres System.CodeDom para lograr lo que desea.

Puede usar las clases en el espacio de nombres System.Reflection y la clase System.Type para descubrir el nombre del ensamblado, el espacio de nombres, las propiedades, los métodos, la clase base y muchos otros metadatos sobre una clase o variable. Luego, usará estos metadatos adquiridos de sus clases de origen/inicio (p. ej., sus clases de formulario) para generar código de sus clases de destino (sus clases comerciales y de datos) utilizando CodeDOM.

Verifique este enlace msdn sobre Cómo: crear una clase usando CodeDOM como punto de partida.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda