C sharp - Ayuda con un public static

 
Vista:

Ayuda con un public static

Publicado por Andres Escobar (6 intervenciones) el 03/10/2007 21:27:54
Buenas tardes estoy haciendo una aplicacion y declare una clase public static void eliminar, alli invoco unas sentencias que me eliminan unos datos de una db dentro del mismo form cree un procedimiento llamado limpiar pero me saca un mensaje de error cuando compilo .

Lo que estoy haciendo es lo siguiente:

public static void Eliminar()
{

BaseDatos Db = new BaseDatos();
Db.ConexionDB();
Db.Eliminar("Delete * From Clientes Where IdCliente='" + Cliente + "'");
txtId.Text = "";
Limpiar();
}

private void Limpiar()
{
txtId="";
txtnombre="";
}

este es el error que me genera
Error 4 Se requiere una referencia a objeto para el campo, método o propiedad no estáticos 'Sic_Boutique.Clientes.txtId'

Quisiera saber como puedo solucionar este problema pues si comentareo el txtid=""; y el limpiar la funcion funciona.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Ayuda con un public static

Publicado por Iván K (55 intervenciones) el 03/10/2007 22:41:21
la función Limpiar() la tienes que establecer estática también, quedaría como sigue:

private static void Limpiar()

y otra cosa, que las líneas:

txtId="";
txtnombre="";

no deberín de ser

txtId.Text="";
txtnombre.Text="";

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un public static

Publicado por Andres Escobar (6 intervenciones) el 03/10/2007 22:52:16
Hola Ivan fue que se me olvido poner el .text en esos campos, trate tambien de poner la funcion Limpiar estatic pero me genera el mismo error no se si es que las funciones static no permiten el manejo de objetos de formulario pero es el mismo error el que genera solo que lo hace por cada uno de los textbox que trato de limpiar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ayuda con un public static

Publicado por Iván K (55 intervenciones) el 03/10/2007 23:16:43
A se me olvido tambíen comentarte que dentro de una función estática, también tienes que manejar objetos y variables estáticas por lo que para que funcione tienes que tener los TextBox estáticos, es decir: txtId y txtnombre estatic.

Si no quieres establecer txtId y txtnombre estáticos, mejor saca la función Limpiar() del método estático Eliminar() y la mandas a ejecutar después de haber llamado el método Eliminar(), es decir, por ejemplo si vas a utilizar Eliminar() en un evento Click de un botón (en realidad no se en que parte la vayas a utilizar) ejecutarías en este evento primero Elimnar() y luego como otra instrucción Limpiar() quedaría como sigue;

public static void Eliminar()
{

BaseDatos Db = new BaseDatos();
Db.ConexionDB();
Db.Eliminar("Delete * From Clientes Where IdCliente='" + Cliente + "'");
}

private void Limpiar()
{
txtId.Text="";
txtnombre.Text="";
}

private void button1_Click(object sender, EventArgs e)
{
Form1.Eliminar();
Limpiar();
}

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un public static

Publicado por Andres Escobar (6 intervenciones) el 04/10/2007 17:17:09
Hola ivan esto lo pudiera hacer si lo tuviera dentro del mismo form pero el problema que tengo es que el boton lo estoy pulsando en un from llamado mensajes y la funcion static void la tengo implementada en un form llamado Clientes.

Te comento lo que estoy haciendo es lo siguiente tengo un form llamdo clentes que se conecta a un DB por medio de una clase, cree un form llamado mensajes alli tengo un labal y dos botones uno de aceptar y otro de cancelar, en este form capturo todos los mensajes que la aplicacion me genera, para este caso en particular en el form clientes el usuario presiona el boton Eliminar y este invoca el form mensajes y despliega el mensaje "Esta seguro que desa eliminar el registro" y da la opcion de aceptar o cancelar, si el usuario presiona acptar el debe invocar una funcion que esta localizada en el form clientes llamada Eliminar (que es la que ya conoces) pero tambien me debe invocar una funcion llamada limpiar, pero para que el form mensajes me vea estas dos funciones declare la funcion eliminar public static void, por que si no la declaro asi entonces no la puedo visualizar desde el otro form, hasta ese punto no tengo problemas, el problema sucede es con Limpiar pues el me debe limpiar son unos textbox y estos no los puedo declarar de tipo static, asi que si me puedes orientar como puedo conseguir este mismo resultado de otra forma te lo estare eternamente agradecido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ayuda con un public static

Publicado por Iván K (55 intervenciones) el 04/10/2007 18:24:44
Mira según como yo estoy entendiendo, mejor utiliza lo que son los descriptores de acceso, ya que lo que estas haciendo, cuando quieras utilizar esa forma de mensajes en otra forma diferente de clientes, entonces tedrías que declarar más funciones de esa otra forma dentro de la de mensajes, entoces no debes de utilizar funciones estáticas (según como yo pienso), es decir, las instrucciones no deben de ejecutarse dentro de la forma de mensajes si no en la misma forma de Clientes.

Si utilizas descriptores de acceso quedaría como sigue:

En la forma de mensajes, que llamaré frmMensaje declará lo siguiente.

/* En la parte de declaraciones */
private DialogResult dsResultado = DialogResult.Cancel;

/* En el evento click del botón de aceptar que llamaré botonAceptar */
private void botonAceptar_Click(object sender, EventArgs e)
{
dsResultado = DialogResult.OK;
this.Close();
}

/* En el evento click del botón de cancelar que llamaré botonCancelar */
private void botonCancelar_Click(object sender, EventArgs e)
{
dsResultado = DialogResult.Cancel;
this.Close();
}

/* Este sería el descriptor de acceso. Tipo get para que nada más se puedan leer datos de esta forma de mensajes */
public DialogResult Resultado
{
get { return dsResultado; }
}

Regresando a la forma de clientes agrega lo siguiente en el evento click del boton de eliminar que llamaré botonEliminar:

private void botonEliminar_Click(object sender, EventArgs e)
{
frmMensaje fMensaje = new frmMensaje();
fMensaje.ShowDialog();
/* Haces uso del descriptor de Mensajes declarado anteriormente. */
if (fMensaje.Resultado == DialogResult.OK)
{
/* Ahora sí ejecutas las funciones que quieres que ya no son estáticas */
Eliminar();
}
}

private void Eliminar()
{
BaseDatos Db = new BaseDatos();
Db.ConexionDB();
Db.Eliminar("Delete * From Clientes Where IdCliente='" + Cliente + "'");
Limpiar();
}

private void Limpiar()
{
txtId.Text="";
txtnombre.Text="";
}

Ya con esto ya no harías uso del estatic y lo ejecutarías todo desde la misma forma de clientes, que para mí sería lo más adecuado. En la variable que utilize para la forma de mensajes "dsResultado", puedes tambíen utilizar una variable del tipo booleano para que cuando de click en aceptar la establezcas en true, en caso contrario en False, nada mas tendrías que hacer el cambio también en el descriptor poniendo bool en lugar de DialogResult y en la forma de clientes, en el if: if (fMensaje.Resultado).

A lo mejor de una manera más rápida, en lugar de utilizar la forma de mensajes, utilizarías el método MessageBox.Show(), pero no se si esta forma la utilizes para otros propósitos por eso la decidiste diseñar.

Haber si esto te ayuda. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un public static

Publicado por Andres Escobar (6 intervenciones) el 04/10/2007 20:45:41
Ivan mil y mil gracias compa usted es un duro, muchas gracias por la paciencia me funciono a las mil maravillas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar