Sie sind auf Seite 1von 11

ARA DE INFORMTICA

Tabla de Contenidos
1.

Cdigo para Crear formularios hijos...................................................................................... 3

2.

Deshabilitar / Habilitar componente para evitar abrir ms de una vez la misma form hija...3

3.

Evitar cerrar la ventana padre sin antes cerrar Todas las ventana hijas...............................4

4.

Abrir un nuevo proceso......................................................................................................... 5

5.

Medir tiempo de proceso....................................................................................................... 6

6.

Validar un RUN...................................................................................................................... 7

7.

Otras validaciones............................................................................................................... 10

1. Cdigo para Crear formularios hijos.


Primero:
La propiedad IsMdiContainer del Form padre se coloca en true
Segundo:
A la ventana hija se le hace una referencia a su ventana padre (se puede sobrecargar el
constructor).
En este caso quin ejecuta la accin es un ToolStripMenu llamado nuevo
private void nuevoToolStripMenuItem_Click(object sender, EventArgs e)
{
string cadena = "CADENA ENVIADA POR CONSTRUCTOR";
Form2 nuevo = new Form2(cadena);
nuevo.MdiParent = this;
nuevo.Show();
}

2. Deshabilitar / Habilitar componente para evitar abrir ms de una vez la


misma Form hija.
Primero:
En la ventana padre->MenuStrip->ToolStripMenu se debe colocar su propiedad
Modifiers en Protected Internal
Segundo:
En la ventana padre se debe Deshabilitar el componente que abre la ventana hija.
En este caso el tem del men se llama nuevo.
Form2 F2 = new Form2();
this.nuevoToolStripMenuItem.Enabled = false;
F2.MdiParent = this;
F2.Show();

//deshabilita el componente

Tercero:
En la ventana hija ( evento Closing ) , se vuelve a habilitar el botn luego de que sta
se cierra.
En este caso la ventana principal se llama FPrincipal.
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
((FPrincipal)MdiParent).nuevoToolStripMenuItem.Enabled = true;

3. Evitar cerrar la ventana padre sin antes cerrar todas las ventanas
hijas
Primero:
En la ventana padre es necesario editar el comportamiento del evento Closing().
En este caso la ventana padre se llama FPrincipal.
Si existen ms de una form abierta (la FPrincipal y alguna hija), se enva una advertencia.
(WARNING)
En caso contrario, se consulta si en realidad desea cerrar la aplicacin. (QUESTION)
private void FPrincipal_FormClosing(object sender, FormClosingEventArgs e)
{
if (Application.OpenForms.Count > 1)
{
DialogResult Mensaje = MessageBox.Show("Cierre todas las ventanas",
"Advertencia", MessageBoxButtons.OK,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button1);
e.Cancel = true;
return;
}
else
{

DialogResult Mensaje = MessageBox.Show("Est seguro que desea salir?",


"Confirmacin", MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2);
if (Mensaje == DialogResult.Yes)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
return;
}

4. Abrir un nuevo proceso


Primero:
Utilizaremos un componente que nos permita generar un evento de accin. Ej.: un
botn.
Segundo:
Necesitaremos ubicar la ruta completa del archivo que queremos ejecutar.
La idea es poder ejecutarla, sin importar el lugar donde se encuentre (siempre y
cuando est dentro de la carpeta de proyecto)
La siguiente lnea nos retorna la ruta del directorio donde se encuentra la aplicacin.
string appPath = Application.StartupPath;
La siguiente lnea nos retorna la ruta completa desde la unidad hasta el archivo.
string app = Application.ExecutablePath;

Previo a esto utilizaremos: using System.Diagnostics;


El archivo ejemplo.txt debe encontrarse junto a la aplicacin.
Utilizando una instancia de Process podemos cambiar a gusto alguna propiedad del
proceso.
private void button2_Click(object sender, EventArgs e)
{
string appPath = Application.StartupPath;
/*

//SE ABRE DE INMEDIATO DE FORMA PREDETERMINADA


appPath= appPath+@"\ejemplo.txt";
Process.Start(appPath);
no necesitamos escribir nada mas.

*/
// EDITAR COMO QUEREMOS ABRIR ARCHIVOS O EJECUTAR PROCESO
//creamos una instancia
Process proc = new Process();
//APLICAMOS DETALLES
//si queremos maximizado ( System.Diagnostics )
proc.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
//si queremos minimizado
//proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
proc.StartInfo.WorkingDirectory = appPath;
proc.StartInfo.FileName = "ejemplo.txt";
proc.Start();
}

5. Medir tiempo de proceso.


Primero:
Para iniciar un cronmetro necesitamos definir una instancia de la clase Stopwatch.
Stopwatch m = Stopwatch.StartNew();
// Se ejecutan los procesos a cronometrar.
TimeSpan TIMER1 = m.Elapsed;

//captura el fin del intervalo de tiempo

LBtime1.Text= TIMER1.ToString();

// En este caso se imprime en un label.

Para iniciar nuevamente el cronmetro se utiliza el mtodo


m.Reset();
Y se vuelve a iniciar con el mtodo m.Start()

si deseamos cronometrar otra cosa.

6. Validar un RUN
bool Validador_digito(string S)
{
string dig;
bool verdad = false;
int[] digito = new int[12];
int suma, resto, verif;
for (int i = 0; i < 9; i++) { digito[i] = 0; }
//Asignacion de
if (S.Length ==
{
digito[0] =
digito[1] =

los caracteres
12) //Si el rut es mayor o igual a 10 mill
int.Parse(S.Substring(0, 1));
int.Parse(S.Substring(1, 1));

digito[2] = int.Parse(S.Substring(3, 1));


digito[3] = int.Parse(S.Substring(4, 1));
digito[4] = int.Parse(S.Substring(5, 1));
digito[5] = int.Parse(S.Substring(7, 1));
digito[6] = int.Parse(S.Substring(8, 1));
digito[7] = int.Parse(S.Substring(9, 1));
}
else // si el digito es diferente o sea.....menor de 10 mill ya que no
hay otra posible entrada gracias a la exp regular o si no quedaria ------>
else if
(S.Length == 11)
{
digito[1] = int.Parse(S.Substring(0, 1));
digito[2] = int.Parse(S.Substring(2, 1));
digito[3] = int.Parse(S.Substring(3, 1));
digito[4] = int.Parse(S.Substring(4, 1));
digito[5] = int.Parse(S.Substring(6, 1));
digito[6] = int.Parse(S.Substring(7, 1));
digito[7] = int.Parse(S.Substring(8, 1));
}
// Operacion matematica
suma = digito[0] * 3 + digito[1] * 2 + digito[2] * 7 + digito[3] * 6 +
digito[4] * 5 + digito[5] * 4 + digito[6] * 3 + digito[7] * 2;
resto = suma % 11;
verif = 11 - resto;
//
if (verif == 0 || verif == 10)
{
dig = "K";
}
else if (verif == 11)
dig = "0";
else dig = verif.ToString();
//Si el dig verif ingresado es K o k y el resultado de la operacion es K
if ((S.Substring(S.Length - 1, 1) == "K" || S.Substring(S.Length - 1, 1) ==
"k") && dig == "K")
verdad = true;
else if (S.Substring(S.Length - 1, 1) == dig) // Si el digito verif es
igual al dig de la operatoria
verdad = true;
return verdad;
}

Se necesita una Expresin regular para validar la entrada en la caja de texto.


bool ES_RUT(string entrada)
{
string cad= @"^\d{1,2}\.\d{3}\.\d{3}[-][0-9kK]{1}$";
System.Text.RegularExpressions.Regex patron = new System.Text.RegularExpressions.Regex(cad);
return patron.IsMatch(entrada);

// Quita el cero de los RUT menores de 10 mill


public string formato_rut(string S)
{
if (S[0] == '0')
{
S = S.Substring(1, S.Length - 1);
}
return S;
}
// Previo a esto anexamos al TextBox un ErrorProvider (el cual nos avisarpor un boton intermitente, cuando el ingreso sea incorrecto.

Utilizaremos el Control de evento Validating del Textbox


private void TBRut_Validating(object sender, CancelEventArgs e)
{
if (ES_RUT(TBRut.Text) == false)
{
errorProvider1.SetError(TBRut, "Ingrese RUT vlido");
e.Cancel = true;
return;
}
// Nombre es valido
errorProvider1.SetError(TBRut, "");
}

Y finalmente el Botn que efecta la accin

private void button1_Click(object sender, EventArgs e)


{
TBRut.Focus();
foreach (Control control in Controls)
{
// Colocamos el foco en el control
control.Focus();
// Validate causes the control's Validating event to be fired,
// if CausesValidation is True
if (!Validate())
{
DialogResult = DialogResult.None;
return;
}
}
//Se llama al digito validador
if (Validador_digito(TBRut.Text) == true)
{
TBRut.Text = formato_rut(TBRut.Text);
MessageBox.Show("RUT VALIDO");
button1.Focus();
}
else

MessageBox.Show("Pruebe otro");

7. Otras validaciones.
Cadenas que solo admiten letras (nada de nmeros u otros caracteres)
bool ES_NOMBRE(string entrada)
{
string cad= @"(^([a-zA-Z](\s[a-zA-Z])?)+)$";
System.Text.RegularExpressions.Regex patron = new System.Text.RegularExpressions.Regex(cad);
return patron.IsMatch(entrada);
//

Nombre y Apellido sin numeros.....solo letras

Cadena que solo admite nmeros


bool ES_EDAD(string entrada)
{
string cad= "^([1-9][0-9]?)+$";
System.Text.RegularExpressions.Regex patron = new System.Text.RegularExpressions.Regex(cad);
return patron.IsMatch(entrada);
//

Edad mayor que

(cero)

bool ES_DIRECCION(string entrada)


{
string cad= @"(^[a-zA-Z|\s]+)(\s+)(([1-9][0-9]?)+)$";
System.Text.RegularExpressions.Regex patron = new System.Text.RegularExpressions.Regex(cad);
return patron.IsMatch(entrada);
}

//

Una o varias cadenas.....seguido de un numerotodo separado por espacios

10

8. Deshabilitar Botn Salir de un Form.


Fuente: http://www.codeproject.com/Articles/20379/Disabling-Close-Button-on-Forms
Los objetos al momento de creacin poseen ciertos parmetros por defecto.
La propiedad CreateParams pertenece a la clase Forms.Control

private const int CP_NOCLOSE_BUTTON = 0x200;


protected override CreateParams CreateParams
{
get
{
CreateParams myCp = base.CreateParams;
myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
return myCp;
}
}

9. Centrar formulario
En el evento Load del form que queris centrar en pantalla:
this.Top = (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2;
this.Left = (Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2;

11

Das könnte Ihnen auch gefallen