Mire tocayo cuando usted utiliza polimorfismo lo primero es que usted tiene que tener los métodos que tomaran otras acciones (formas) virtuales para poder ser sobre escritos desde una clase extendida o derivada; como puede ver tambien se necesitará Herencia, ya que desde la clase secundaria que ha heredado de la primaria es que hará las overrides tomando exctamente los mismos métodos virtuales de la clase primaria o base para agregale nuevas funcionalidades. De esta forma tendra un método X que en una clase Base A hace tal cosa y el mismo metodo X en la clase derivada B hace tambien otras cosas. En cuanto a Sobrecarga, es super simple la diferencia ya que cuando usted utiliza sobrecarga simplemente tiene mas de un metodo dentro de una misma clase con un mismo nombre pero que reciben distintos tipos o distintas cantidades de parametros, dentro del cuerpo de estos metodos usted tendrá las funcionalidades que usted desee, hasta las mismas que quiera, solo que al llamar uno de estos metodos, se entenderá a cual usted llama dependiendo de la cantidad o tipos de parametros que mande. Para ejemplos y más detalles puede ver en el Archivo del blog Herencia. Más luego redactare acerca de sobrecargas.
Lo de polimorfismo es mas un tema conceptual, porque lo que significa es que un objeto X puede, dependiendo del contexto, tomar distintas formas (poli-morfismo) y las sobrecargas se definen como metodos/constructores con el mismo nombre pero con firmas distintas.
Por ejemplo: El .NET Framework, al momento de compilar, firma los metodos y constructores con un identificador para poder diferenciarlos. Es decir, si tienen el mismo nombre pero diferentes parametros, el identificador es distinto. En el caso del Polimorfismo 1+ metodos son sobrescritos y no necesariamente sobrecargados.
Mira pana, con respecto a tu pregunta de si un metodo static puede solo llamar a otro tambien con el mismo modificador tengo para decirte que si hay reglas utilizando clases y miembros de clases statics, por ejemplo tu no puedes hacer referencia a un miembro estático por medio de una instancia. En vez de esto, se debe hacer referencia por medio del nombre de tipo. Algo asi como este ejemplo de clase:
public class ClaseA { public struct Estructura { public static int x = 10; } } Para referirse al miembro estático x, tu deberas utilizar el nombre completo (a menos que sea accesible desde el mismo ámbito) de esta forma:
ClaseA.Estructura.x
Nota: Tu no podras utilizar this para hacer referencia a descriptores de acceso de propiedades o métodos static puesto que existe solo una copia del campo porque el mismo es static a diferencia de cuando es una instancia de una clase no static, que contiene una copia independiente de todos los campos de instancia de la misma.
Si esto responde a tu pregunta avisa o reformula tu pregunta.
Con respecto a tu segunda pregunta, tengo para decirte que debes reformularle, ya que no comprendo bien a que te refieres, honestamente entiendo un millon de cosas con eso pero no se que exactamente responderte por tanto delimita esa pregunta o especificate mejor. Otra cosa, para tus preguntas utiliza el signo ? el cual es utilizado para formular preguntas...
@Jonathan Rafael: Un metodo static puede llamar solo a otro metodos static?
Respuesta: Si, se puede. La diferencia entre lo que es "static" y lo que no lo es, es que lo "static" esta siempre instanciado y en memoria, por lo que podemos acceder a metodos y propiedades que ya sean estaticas.
Dentro de un metodo estatico pueden crearse instancias nuevas de otros objetos y tambien llamar metodos estaticos de otras clases.
Y como dice JN, no puedes llamar a un metodo estatico de una clase si esa clase ha sido instanciada.
Hey JN# estoy pranticando y queria saber si con el Miembro Estático puedo definir miembros de un objeto que no son asociados con una instancia de una clase específica
@mire jaime lo q yo pude inventigar es que La palabra clave static especifica que una variable o función se crea únicamente una vez por cada clase, en lugar de crearse en cada objeto basado en dicha clase. Puede acceder a un miembro de clase estático sin crear una instancia de la clase. Los métodos y propiedades estáticos pueden establecerse en el ámbito público o privado.
Hola Jaime, lo que preguntas creo que te lo estas respondiendo a la vez, ya que si tu tienes un miembro estatico, entendiendo por miembro "en este caso" un Metodo, dentro de este podras tener el universo que desees de objetos creados por ti, a sabiendas de que un objeto podria ser cualquier tipo en C#(Atributos, Propiedades, etc.). Por ejemplo:
public static void MiMensaje(string Text,int UsuarioID, string Usuario, DateTime Fecha) { int ID = UsuarioID; string User = Usuario; DateTime fecha = Fecha;
MessageBox.Show("El Usuario: "+ ID +" "+ User +" tiene el siguiente mensaje: " Text + " en fecha "+fecha, "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
Ese metodo static que se llama MiMensaje es un miembro de una clase y como puedes ver dentro tiene definido varios objetos y no son instanciados desde ninguna clase.
Repito, debes saber que partimos de la realidad de que todo es un objeto.
Jaime, he quitado su pregunta sobre conseguir el DVD de Visual Studio ya que eso es un tema que no se puede tratar en este blog ya que usted sabe que ese software tiene derechos reservados, ese tipo de pregunta la puede hacer en la universidad.
JN# es algo asi que necesito mas o meno, pero que me elimine la [X] y me deje activo el boton maximizar y el minimizar, porque cuando estoy trabajando con el BorderStyle en NONE no me aparece ni el icono, ni el encabezado de la ventana
Public Class FRMPrueba
Private Sub FRMPrueba_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.MaximizeBox = False 'Elimina el Boto Maximizar' Me.MinimizeBox = False 'Elimina el Boto Mainimizar' End Sub End Class
JN# Tengo varios TextBox uno de bajo del otro y quiero saber conque codigo hago que uno no me pase al otro hasta que este este lleno. eso es en Visual Basic.Net
@ Juan Alvares; si, pero quiero saber que codigo poner en ese evento "Leave". si ni es mucha molestia podria hacerme un ejemplo en Visual Basic.Net y que este contenga el boton [X] bloqueado. mi correo es el_clar0@hotmail.com
Hola al claro, veo que lo que quiere es muy simple, si es validar un textbox anterior seria primero que esten todos enabled = false or locked = true y cada vez que llene un textbox en el evento leave pregunta si esta lleno que pase al siguiente y al mismo tiempo lo desbloquee, algo asi creo: if me.textbox1.text.trim() <> "" then textbox2.locked = false textbox2.focus()
Espero eso le ayude al claro y como dice Juan eso es bien simple.
Hello Claro, tu solicitud es simple, te ayudaré a que la desarrolles de la forma más práctica.
Teniendo en cuenta que tienes n TexBox en tu WindowsForm
1) En el evento Load del WinForm activaremos el KeyPreview para aprovechar la tecla enter: Me.KeyPreview = True
2) En el evento KeyPress del WinForm: If (e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter)) Then Me.SelectNextControl(ActiveControl, True, True, True, True) End If
3) Para cada TextBox a partir del segundo en adelante, en su evento Enter Private Sub TextBox2_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.Enter If (Me.TextBox1.Text.Trim() = String.Empty) Then Me.TextBox1.Focus() End If End Sub
Private Sub TextBox3_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.Enter If (Me.TextBox2.Text.Trim() = String.Empty) Then Me.TextBox2.Focus() End If End Sub
Private Sub TextBox4_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.Enter If (Me.TextBox3.Text.Trim() = String.Empty) Then Me.TextBox3.Focus() End If End Sub
.... o sea, en el evento Enter del TextBox2 validas el anterior TextBox1; en el evento Enter del TextBox3 validas el anterior TextBox2; ... y la validación consiste en determinar si el TextBox anterior está clear..
@ Aybar Gracias por el codigo exactamente era eso lo que buscaba y a Juan Alvarez de esa forma me funciona, pero no queria los textBox me apareciera bloqueado. pero de todos modos gracias
JN# se puede hacer a travez de codigo una aplicacion que apartir de la primera vez que sea ejecutada se me bloque en un determinado momento (cuando yo quiera).
esi lo que quiero es hacer un programa version DEMO, que cuando cumpla una fecha limite se bloque y me salgo un mensaje.
Pues por supuesto que si, si mal no recuerdo creo que ha aproximadamenteeeeee: un millón de formas de hacer una demo. Las mas comunes son las que se controlan por fechas, otras las controlan por cantidad de registros en una u otra tabla determinada, otras por cantidades de entradas al sistema, etc, etc.
@ Anónimo, El que me interesa a mi es el que me valide desde la primera entrada al sistema hasta un periodo de 30 dias, esi esta asu alcance porner el codigo.
Buenos días Claro... si quieres validar que tu demo funcione hasta 30 días posteriores a su instalación....
Tienes que tener en cuenta que tu aplicación debe escribir la fecha en la que inició sus funciones o un deadline, ya sea en un Key del registro de Windows, en una tabla de tu DB (si se conecta a una DB) o si lo licencias con una entidad de Licenciamiento (esta es de paga $$)... sin importar el esquema que uses para validar las fechas debes crear un algoritmo que sea capaz de controlar los fraudes (si tú vas a controlar esto), tales como si el usuario atrasa el calendrio del sistema... si lo aumenta... y cosas por el estilo....
@ Juan Alvarez, Private Sub Demo() On Error GoTo Demo_Error With Adodc1 .ConnectionString = ConexionBDatos .CursorType = adOpenStatic .CommandType = adCmdTable .RecordSource = "PARAMETROS" .Refresh End With
If Control.Text = "0" Then Adodc1.Recordset!Control = "2" Adodc1.Recordset!FechaInstal = Date Adodc1.Recordset.Update End If
If Control.Text = "0" Or "2" Then Call CalcDiasDemo Else If WControl = "8" Then Mensaje.Visible = True Mensaje.Text = LoadResString(1915) '"El período de vigencia de la versión 'DEMO' ha expirado." End If
If WControl = "9" Then Mensaje.Visible = True Mensaje.Text = LoadResString(1916) '"Versión 'DEMO' bloqueada por alteración de funciones." End If End If
On Error GoTo 0 Exit Sub
Demo_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") Demo de Formulario frmDemo" End Sub
@Claro: Nunca y bajo ninguna circunstancia utilices el GoTo, es retornar al pasado. Muchos de los operadores de C# y VB.NET se crearon para evitar eso del GoTo.
Para el manejo de errores usa el "Try/Catch"
Por cierto, si esto es "Aprende C#", porque estas en VB.NET?
Saludos muchachos estuve viendo sus comentarios y los he quitado por la siguiente razon: el blog que estamos desarrollando poco a poco esta orientado a enseñar a programar en C# pero tambien como los que estamos como moderadores (JN#, Aybar, Fernando y Juan)tenemos cierto experticio en .NET podemos ayudar en otros lenguajes y hasta en SQL Server de ser necesario. Ese tipo de comentario que fue suprimido no es necesario en este espacio el cual esta ideado para enseñar a programar. Jaime y Jonathan, como buenos participantes, deben mantener esta politica aplicada e interactuar como ya ustedes saben que deben hacerlo, nosotros solo queremos ayudarlos, NO otra cosa.
Sobre la sugerencia que te hace Juan de NO usar go to por lo que se te explica es 100 % válida, usted como estudiante debe captar esa sugerencia y aplicarla y, ese ejemplo que usted hizo o encontro (en VB 6) debe mejorarlo y llevarlo a otro nivel el cual podríamos ayudarle o darle la luz para que lo resuelva. Cualquier sugerencia que haga uno de nosotros siempre será pensando en lo mejor de las ayudas.
Saludos ElGordo7030... para invocar archivos parecido al Shell de Windows utilizamos el Método Start de la Clase Process, este método tiene unas 4 ó 5 sobrecargas(no recuerdo) donde una de ellas espera un string con el path del archivo que quieres invocar:
System.Diagnostics.Process.Start("");
Además, soporta otros parámetros que te permiten por así decirlo "manipular" la ventana resultante al ejecutar el método Start.
Finalmente, puedes documentarte ampliamente en MSDN http://msdn.microsoft.com/en-us/library/system.diagnostics.aspx
Con respecto a limitar una DEMO: Ayer le explicaba en el curso una forma muy simple de hacerlo, aqui le dare otro ejemplo bien facil que puede implementear
le dije ayer que en su login del sistema cuando el usuario se loguee por primera vez usted guarda la fecha en la que lo hizo. Puede crear un metodo que guarde la fecha actual en su tabla que tenga el campo fecha de vencimiento, para ello puede crear un metodo de la siguiente manera:
Static DateTime FechaVencimiento() { DateTime MiFecha = new DateTime(); SqlConnection conexion = new SqlConnection("strindeconexion"); //Con este comando insertaras la fecha solo la primera vez SqlCommand comando1 = new SqlCommand("Insert into Tabla(Fecha) Values (GetDate()) Where Fecha is Null"); Comando1.CommandType = CommandType.Text;
//Co este comando traeras la fecha de vencimiento existente en la tabla SqlCommand Comando2 = new SqlCommand("Select Fecha + 30 From Tabla"); //30 seria la cantidad de dias habiles Comando2.SqlCommandTpe = CommandType.Text;
Con este mismo principio puede crear otras limitaciones a su Demo, por ejemplo controlar una cantidad de registros en su tabla de clientes o facturas, que si llega a 10 registros la demo dejara de funcionar, etc.
@Claro saludos.... medianamente está mal... el compilador desconoce blue... porque dentro del Collection de coleres de ConsoleColor no existe... recuerda que C# es un lenguaje estructurado y distingue Mayúsculas de Minúsculas.... y un poco más allá las propiedades, nombres de clases, identificadores... empiezan con Mayúsculas... otra cosilla... el ForegroundColor es para la Fuente, la propiedad que buscas es BackgroundColor.
Para lograr lo que quieres tendras que importar un .dll de windows (kernel32.dll) y llamar el metodo SetConsoleTextAttribute. En la página http://www.c-sharpcorner.com/UploadFile/kashifbilal/ColoringTheConsole12192005015120AM/ColoringTheConsole.aspx explica todo detalladamente. Espero te sirva.
La forma mas simple de cambiar el color del background completo es la siguiente: right click sobre la barra de titulo, luego properties. Luego teniendo la opcion Screen Background seleccionada escoge el color azul que quiere. Por ultimo cuando le de OK le sandran dos opciones, seleccionara la que dice: Save properties for future windows with same title. Esto es otra forma de resolver tu problema.
Cuando hablo de barra de titulo me estoy refiriendo a la CONSOLA, es decir cuando usted corra su programa de CONSOLA es que hara los pasos antes dados. Una vez hecho eso siempre su consola lucira con los colores especificados.
@Claro... debe verifcar la instalación de la Versión del Visual Studio que usa.... deme su correo para enviarle un demo con el ejemplo que le suministré... el mio es aybarpedro@hotmail.com
Comparto un pequeño código que tuve que hacer hoy para hacer copias de objetos que son referencias y poder modificar las copias sin afectar los objetos originales. Este código solo es aplicable si el objeto que se desea copiar es serializable. Anexo la clase y un programa pueda para quien pueda interesar. Salu2.
NOTA: lo subo en dos partes porque no cabe todo en un solo comentario
Primera parte:
[Serializable] public class Duplicable<T> { /// <summary> /// Duplica el objeto y devuelve una nueva instancia del mismo. /// </summary> /// <returns>Duplicado del objeto.</returns> public T Duplicar() { //Se crea un objeto serializador en formato binario. BinaryFormatter bf = new BinaryFormatter();
//Se crea un memory stream el cual alojará el objeto serializado. MemoryStream ms = new MemoryStream();
//Se serializa el objeto. bf.Serialize(ms, this);
//Se ajusta la posición del stream al inicio para poder deserializar el objeto. ms.Seek(0, SeekOrigin.Begin);
//Se devuelve el objeto deserializado lo que obliga a crear una nueva instancia del mismo. return (T)bf.Deserialize(ms); }
/// <summary> /// Duplica el objeto que se pasa como parametro y devuelve una nueva instancia del mismo. /// </summary> /// <param name="objeto">Objeto a duplicar.</param> /// <returns>Duplicado del objeto.</returns> public static T Duplicar(T objeto) { //Se crea un objeto serializador en formato binario. BinaryFormatter bf = new BinaryFormatter();
//Se crea un memory stream el cual alojará el objeto serializado. MemoryStream ms = new MemoryStream();
//Se serializa el objeto. bf.Serialize(ms, objeto);
//Se ajusta la posición del stream al inicio para poder deserializar el objeto. ms.Seek(0, SeekOrigin.Begin);
//Se devuelve el objeto deserializado lo que obliga a crear una nueva instancia del mismo. return (T)bf.Deserialize(ms); } }
using System; using System.Collections.Generic; using System.Text; using System.Globalization; using System.Threading; using System.IO; using System.Runtime.Serialization.Formatters.Binary;
namespace TestProgram { class Program { static void Main(string[] args) { //Ajusto la cultura a España para que las fechas se lean correctamente ("MM-dd-yyyy HH:mm:ss") Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("es-ES"); Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("es-ES");
//Se crea y se imprime el objeto base para realizar la copia Persona p1 = new Persona("Fernando", "Alvarez", DateTime.Parse("02/09/1985")); Console.WriteLine("La persona original es:\n"); p1.Imprimir();
//Se copia el objeto base y se vuelve a imprimir en pantalla Persona p2 = p1.Duplicar(); Console.WriteLine("La persona copia es:\n"); p2.Imprimir();
//Se crea otro objeto persona igualandolo al objeto base Persona p3 = p1; Console.WriteLine("La persona referencia es:\n"); p3.Imprimir();
//Se modifica el objeto base para ver que el copia no se afecta p1.Nombre = "Pedro"; Console.WriteLine("La persona original se ha cambiado:\n"); p1.Imprimir();
//Se indica que al modificar el objeto base, la copia no se afecta ya que no es una referencia Console.WriteLine("La persona copia sigue siendo la misma:\n"); p2.Imprimir();
//Se indica que al modificar el objeto base, la referencia se ve afectada Console.WriteLine("La persona referencia ha cambiado:\n"); p3.Imprimir();
//Evita que se cierre la consola Console.ReadKey(); } }
/// <summary> /// Clase persona /// </summary> [Serializable] class Persona : Duplicable<Persona> { private string nombre; public string Nombre { get { return nombre; } set { nombre = value; } } private string apellido; public string Apellido { get { return apellido; } set { apellido = value; } } DateTime fechaNacimiento; public int Edad { get { //Se calcula la edad a partir de la fecha de nacimiento DateTime dFechaActual = DateTime.Now; TimeSpan tsEdad = dFechaActual.Subtract(fechaNacimiento); DateTime dEdad = DateTime.MinValue + tsEdad; return dEdad.Year - 1; } }
me pueden ayudar con este trabajo para el instituto por favor soy novato en esto. Ingreso Alumno Permitir el ingreso de información relacionada con los alumnos de una institución, es necesario registrar los siguientes datos para cada alumno ingresado: Rut Nombre Apellido Edad Fecha de Nacimiento Sexo E-mail Fono contacto Carrera seleccionada La cantidad de alumnos debe ser definida por el usuario una vez requiera utilizar la aplicación, no es necesario completar el ingreso del total de los alumnos para realizar consultas. Las consultas a este nivel solo corresponden a consultas básicas ejemplo: Cantidad de alumnos matriculados Consultas individuales por rut para verificar por ejemplo que exista el alumno o en qué carrera se encuentra inscrito. Ingreso Notas Además se solicita el ingreso de cuatro notas en total para cada alumno existente en el sistema, todas las notas deben ser ingresadas y el formato corresponde desde el 1.0 al 7.0.
Consultas Con todos los datos de un alumno debemos proveer información estadística para los directores de la institución, información como: Cantidad de alumnos mujeres y hombres matriculados. Qué porcentaje representan cada uno. Qué carrera cuenta con más mujeres u hombres matriculados. Que cantidad de aprobados y reprobados, además el porcentaje que representan. Tener alguna relación con la edad por ejemplo por carrera.
Se solicita proveer una solución para el requerimiento descrito anteriormente.
Observaciones El máximo de ingresos es determinado por el usuario. Cada vez que se realice una operación se debe consultar si se desea continuar “Si”para continuar en la opción seleccionada “No” para volver al menú principal. Si los arreglos utilizados en el desarrollo no contiene datos, no se debe permitir la opción de visualización o consultas indicándolo en un mensaje.
Lo sentimos amigo #fabi, Nosotros ayudamos a resolver problemas puntuales como errores, mejores practicas en códigos, etc., pero NO hacemos 'tareas'. Disculpa los inconvenientes por no poder ayudarte en ese sentido. Empieza a hacer tu tarea, y cuando tengas dudas de como hacer algo "puntual" o tengas algún error, etc, entonces nos escribes y con gusto te ayudaremos.
A desarrollar una aplicación visual que dé solución a un problema en el que esté presente el polimorfismo a partir de la identificación de los métodos virtuas,clases y métodos abstractos presentes en las solucioón del mismo. implementar las clases parques, Aparatos , AparatosNinnos y AparatosAdultos.
Diferencias entre polimorfismo y sobrecarga
ResponderBorrarMire tocayo cuando usted utiliza polimorfismo lo primero es que usted tiene que tener los métodos que tomaran otras acciones (formas) virtuales para poder ser sobre escritos desde una clase extendida o derivada; como puede ver tambien se necesitará Herencia, ya que desde la clase secundaria que ha heredado de la primaria es que hará las overrides tomando exctamente los mismos métodos virtuales de la clase primaria o base para agregale nuevas funcionalidades. De esta forma tendra un método X que en una clase Base A hace tal cosa y el mismo metodo X en la clase derivada B hace tambien otras cosas. En cuanto a Sobrecarga, es super simple la diferencia ya que cuando usted utiliza sobrecarga simplemente tiene mas de un metodo dentro de una misma clase con un mismo nombre pero que reciben distintos tipos o distintas cantidades de parametros, dentro del cuerpo de estos metodos usted tendrá las funcionalidades que usted desee, hasta las mismas que quiera, solo que al llamar uno de estos metodos, se entenderá a cual usted llama dependiendo de la cantidad o tipos de parametros que mande. Para ejemplos y más detalles puede ver en el Archivo del blog Herencia. Más luego redactare acerca de sobrecargas.
ResponderBorrarLo de polimorfismo es mas un tema conceptual, porque lo que significa es que un objeto X puede, dependiendo del contexto, tomar distintas formas (poli-morfismo) y las sobrecargas se definen como metodos/constructores con el mismo nombre pero con firmas distintas.
ResponderBorrarPor ejemplo: El .NET Framework, al momento de compilar, firma los metodos y constructores con un identificador para poder diferenciarlos. Es decir, si tienen el mismo nombre pero diferentes parametros, el identificador es distinto. En el caso del Polimorfismo 1+ metodos son sobrescritos y no necesariamente sobrecargados.
un metodo static puede llamar solo a otro metodos static
ResponderBorrarLos operadores a nivel de bit no se pueden aplicar a tipos bool, float, double o decimal.
ResponderBorrarMira pana, con respecto a tu pregunta de si un metodo static puede solo llamar a otro tambien con el mismo modificador tengo para decirte que si hay reglas utilizando clases y miembros de clases statics, por ejemplo tu no
ResponderBorrarpuedes hacer referencia a un miembro estático por medio de una instancia. En vez de esto, se debe hacer referencia por medio del nombre de tipo. Algo asi como este ejemplo de clase:
public class ClaseA
{
public struct Estructura
{
public static int x = 10;
}
}
Para referirse al miembro estático x, tu deberas utilizar el nombre completo (a menos que sea accesible desde el mismo ámbito) de esta forma:
ClaseA.Estructura.x
Nota: Tu no podras utilizar this para hacer referencia a descriptores de acceso de propiedades o métodos static puesto que existe solo una copia del campo porque el mismo es static a diferencia de cuando es una instancia de una clase no static, que contiene una copia independiente de todos los campos de instancia de la misma.
Si esto responde a tu pregunta avisa o reformula tu pregunta.
Con respecto a tu segunda pregunta, tengo para decirte que debes reformularle, ya que no comprendo bien a que te refieres, honestamente entiendo un millon de cosas con eso pero no se que exactamente responderte por tanto delimita esa pregunta o especificate mejor. Otra cosa, para tus preguntas utiliza el signo ? el cual es utilizado para formular preguntas...
ResponderBorrar@Jonathan Rafael:
ResponderBorrarUn metodo static puede llamar solo a otro metodos static?
Respuesta: Si, se puede. La diferencia entre lo que es "static" y lo que no lo es, es que lo "static" esta siempre instanciado y en memoria, por lo que podemos acceder a metodos y propiedades que ya sean estaticas.
Dentro de un metodo estatico pueden crearse instancias nuevas de otros objetos y tambien llamar metodos estaticos de otras clases.
Y como dice JN, no puedes llamar a un metodo estatico de una clase si esa clase ha sido instanciada.
Hey JN# estoy pranticando y queria saber si con el Miembro Estático puedo definir miembros de un objeto que no son asociados con una instancia de una clase específica
ResponderBorrar@mire jaime lo q yo pude inventigar es que La palabra clave static especifica que una variable o función se crea únicamente una vez por cada clase, en lugar de crearse en cada objeto basado en dicha clase. Puede acceder a un miembro de clase estático sin crear una instancia de la clase. Los métodos y propiedades estáticos pueden establecerse en el ámbito público o privado.
ResponderBorrarHola Jaime, lo que preguntas creo que te lo estas respondiendo a la vez, ya que si tu tienes un miembro estatico, entendiendo por miembro "en este caso" un Metodo, dentro de este podras tener el universo que desees de objetos creados por ti, a sabiendas de que un objeto podria ser cualquier tipo en C#(Atributos, Propiedades, etc.). Por ejemplo:
ResponderBorrarpublic static void MiMensaje(string Text,int UsuarioID, string Usuario, DateTime Fecha)
{
int ID = UsuarioID;
string User = Usuario;
DateTime fecha = Fecha;
MessageBox.Show("El Usuario: "+ ID +" "+ User +" tiene el siguiente mensaje: " Text + " en fecha "+fecha, "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
Ese metodo static que se llama MiMensaje es un miembro de una clase y como puedes ver dentro tiene definido varios objetos y no son instanciados desde ninguna clase.
Repito, debes saber que partimos de la realidad de que todo es un objeto.
Jaime, he quitado su pregunta sobre conseguir el DVD de Visual Studio ya que eso es un tema que no se puede tratar en este blog ya que usted sabe que ese software tiene derechos reservados, ese tipo de pregunta la puede hacer en la universidad.
ResponderBorrarOtra cosa, si usted desea puede descargar las versiones Express las cuales son gratis desde Microsoft. http://www.microsoft.com/express/downloads/
ResponderBorrarJN# es algo asi que necesito mas o meno, pero que me elimine la [X] y me deje activo el boton maximizar y el minimizar, porque cuando estoy trabajando con el BorderStyle en NONE no me aparece ni el icono, ni el encabezado de la ventana
ResponderBorrarPublic Class FRMPrueba
Private Sub FRMPrueba_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.MaximizeBox = False 'Elimina el Boto Maximizar'
Me.MinimizeBox = False 'Elimina el Boto Mainimizar'
End Sub
End Class
Lo que quieres hacer es que el formulario no se pueda cerrar por el boton?
ResponderBorrarPara cancelar el cerrado solo tienes que cancelar el evento de cerrado. Aqui te dejo en ejemplo:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
JN# Tengo varios TextBox uno de bajo del otro y quiero saber conque codigo hago que uno no me pase al otro hasta que este este lleno. eso es en Visual Basic.Net
ResponderBorrarSera desplazarse al siguiente con presionar "TAB" ?
ResponderBorrar@ Juan Alvares; No es eso lo que quiero sino que no me permita bajar al proximo Textbox sin antes que el primero tenga informacion
ResponderBorrarValida en el evento "Leave" del textbox
ResponderBorrar@ Juan Alvares; si, pero quiero saber que codigo poner en ese evento "Leave". si ni es mucha molestia podria hacerme un ejemplo en Visual Basic.Net y que este contenga el boton [X] bloqueado. mi correo es el_clar0@hotmail.com
ResponderBorrarIntenta desarrollarlo, es muy simple.
ResponderBorrarHola al claro, veo que lo que quiere es muy simple, si es validar un textbox anterior seria primero que esten todos enabled = false or locked = true y cada vez que llene un textbox en el evento leave pregunta si esta lleno que pase al siguiente y al mismo tiempo lo desbloquee, algo asi creo: if me.textbox1.text.trim() <> "" then
ResponderBorrartextbox2.locked = false
textbox2.focus()
Espero eso le ayude al claro y como dice Juan eso es bien simple.
Hello Claro, tu solicitud es simple, te ayudaré a que la desarrolles de la forma más práctica.
ResponderBorrarTeniendo en cuenta que tienes n TexBox en tu WindowsForm
1) En el evento Load del WinForm activaremos el KeyPreview para aprovechar la tecla enter:
Me.KeyPreview = True
2) En el evento KeyPress del WinForm:
If (e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter)) Then
Me.SelectNextControl(ActiveControl, True, True, True, True)
End If
3) Para cada TextBox a partir del segundo en adelante, en su evento Enter
Private Sub TextBox2_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.Enter
If (Me.TextBox1.Text.Trim() = String.Empty) Then
Me.TextBox1.Focus()
End If
End Sub
Private Sub TextBox3_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.Enter
If (Me.TextBox2.Text.Trim() = String.Empty) Then
Me.TextBox2.Focus()
End If
End Sub
Private Sub TextBox4_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.Enter
If (Me.TextBox3.Text.Trim() = String.Empty) Then
Me.TextBox3.Focus()
End If
End Sub
.... o sea, en el evento Enter del TextBox2 validas el anterior TextBox1; en el evento Enter del TextBox3 validas el anterior TextBox2; ... y la validación consiste en determinar si el TextBox anterior está clear..
@ Aybar Gracias por el codigo exactamente era eso lo que buscaba y a Juan Alvarez de esa forma me funciona, pero no queria los textBox me apareciera bloqueado. pero de todos modos gracias
ResponderBorrarJN# se puede hacer a travez de codigo una aplicacion que apartir de la primera vez que sea ejecutada se me bloque en un determinado momento (cuando yo quiera).
ResponderBorraresi lo que quiero es hacer un programa version DEMO, que cuando cumpla una fecha limite se bloque y me salgo un mensaje.
Pues por supuesto que si, si mal no recuerdo creo que ha aproximadamenteeeeee: un millón de formas de hacer una demo. Las mas comunes son las que se controlan por fechas, otras las controlan por cantidad de registros en una u otra tabla determinada, otras por cantidades de entradas al sistema, etc, etc.
ResponderBorrar@ JN# cual seria el mas recomendado y cual seria el codigo mas simple.
ResponderBorrarUsa el mas comun caballero
ResponderBorrarPor ejemplo: si la fecha actual es mayor o igual a la fecha de vencimiento, muestra mensaje DEMO vencida de lo contrario abre aplicacion.
@ Anónimo, El que me interesa a mi es el que me valide desde la primera entrada al sistema hasta un periodo de 30 dias, esi esta asu alcance porner el codigo.
ResponderBorrar@El Claro, Como lo harias? Que tienes en mente?
ResponderBorrarBuenos días Claro... si quieres validar que tu demo funcione hasta 30 días posteriores a su instalación....
ResponderBorrarTienes que tener en cuenta que tu aplicación debe escribir la fecha en la que inició sus funciones o un deadline, ya sea en un Key del registro de Windows, en una tabla de tu DB (si se conecta a una DB) o si lo licencias con una entidad de Licenciamiento (esta es de paga $$)... sin importar el esquema que uses para validar las fechas debes crear un algoritmo que sea capaz de controlar los fraudes (si tú vas a controlar esto), tales como si el usuario atrasa el calendrio del sistema... si lo aumenta... y cosas por el estilo....
@ Juan Alvarez, Private Sub Demo()
ResponderBorrarOn Error GoTo Demo_Error
With Adodc1
.ConnectionString = ConexionBDatos
.CursorType = adOpenStatic
.CommandType = adCmdTable
.RecordSource = "PARAMETROS"
.Refresh
End With
If Control.Text = "0" Then
Adodc1.Recordset!Control = "2"
Adodc1.Recordset!FechaInstal = Date
Adodc1.Recordset.Update
End If
If Control.Text = "0" Or "2" Then
Call CalcDiasDemo
Else
If WControl = "8" Then
Mensaje.Visible = True
Mensaje.Text = LoadResString(1915) '"El período de vigencia de
la versión 'DEMO' ha expirado."
End If
If WControl = "9" Then
Mensaje.Visible = True
Mensaje.Text = LoadResString(1916) '"Versión 'DEMO' bloqueada
por alteración de funciones."
End If
End If
On Error GoTo 0
Exit Sub
Demo_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") Demo de
Formulario frmDemo"
End Sub
@Claro: Nunca y bajo ninguna circunstancia utilices el GoTo, es retornar al pasado. Muchos de los operadores de C# y VB.NET se crearon para evitar eso del GoTo.
ResponderBorrarPara el manejo de errores usa el "Try/Catch"
Por cierto, si esto es "Aprende C#", porque estas en VB.NET?
JN# mi tocayo como puedo ponerle Ayuda en Linea a formulario (Abrir un Archivo que esta fuera)
ResponderBorrarSaludos muchachos estuve viendo sus comentarios y los he quitado por la siguiente razon: el blog que estamos desarrollando poco a poco esta orientado a enseñar a programar en C# pero tambien como los que estamos como moderadores (JN#, Aybar, Fernando y Juan)tenemos cierto experticio en .NET podemos ayudar en otros lenguajes y hasta en SQL Server de ser necesario. Ese tipo de comentario que fue suprimido no es necesario en este espacio el cual esta ideado para enseñar a programar. Jaime y Jonathan, como buenos participantes, deben mantener esta politica aplicada e interactuar como ya ustedes saben que deben hacerlo, nosotros solo queremos ayudarlos, NO otra cosa.
ResponderBorrarSobre la sugerencia que te hace Juan de NO usar go to por lo que se te explica es 100 % válida, usted como estudiante debe captar esa sugerencia y aplicarla y, ese ejemplo que usted hizo o encontro (en VB 6) debe mejorarlo y llevarlo a otro nivel el cual podríamos ayudarle o darle la luz para que lo resuelva. Cualquier sugerencia que haga uno de nosotros siempre será pensando en lo mejor de las ayudas.
Este comentario ha sido eliminado por el autor.
ResponderBorrarSaludos ElGordo7030... para invocar archivos parecido al Shell de Windows utilizamos el Método Start de la Clase Process, este método tiene unas 4 ó 5 sobrecargas(no recuerdo) donde una de ellas espera un string con el path del archivo que quieres invocar:
ResponderBorrarSystem.Diagnostics.Process.Start("");
Además, soporta otros parámetros que te permiten por así decirlo "manipular" la ventana resultante al ejecutar el método Start.
Finalmente, puedes documentarte ampliamente en MSDN
http://msdn.microsoft.com/en-us/library/system.diagnostics.aspx
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
Este comentario ha sido eliminado por el autor.
ResponderBorrarCon respecto a limitar una DEMO: Ayer le explicaba en el curso una forma muy simple de hacerlo, aqui le dare otro ejemplo bien facil que puede implementear
ResponderBorrarle dije ayer que en su login del sistema cuando el usuario se loguee por primera vez usted guarda la fecha en la que lo hizo.
Puede crear un metodo que guarde la fecha actual en su tabla que tenga el campo fecha de vencimiento, para ello puede
crear un metodo de la siguiente manera:
Static DateTime FechaVencimiento()
{
DateTime MiFecha = new DateTime();
SqlConnection conexion = new SqlConnection("strindeconexion");
//Con este comando insertaras la fecha solo la primera vez
SqlCommand comando1 = new SqlCommand("Insert into Tabla(Fecha) Values (GetDate()) Where Fecha is Null");
Comando1.CommandType = CommandType.Text;
//Co este comando traeras la fecha de vencimiento existente en la tabla
SqlCommand Comando2 = new SqlCommand("Select Fecha + 30 From Tabla"); //30 seria la cantidad de dias habiles
Comando2.SqlCommandTpe = CommandType.Text;
Try
{
conexion.Open();
comando1.ExecuteNonQuery();
MiFecha = DateTime.Parse(Comando2.ExecuteScalar()); //O (DateTime)Comando2.ExecuteScalar() o Convert.ToDateTime()...
}
Catch(SqlException ex)
{
string error = ex.Message.ToString();
}
Finally
{
conexion.close();
Comando1.Dispose();
Comando2.Dispose();
}
return MiFecha;
}
Entonces con ese metodo que lo hace todo, solamente tendria que hacer lo siguiente en el Log In:
if(DateTime.Now < this.FechaVecmiento.().AddDays(-30))
{
MessageBox.Show("Fecha del sistema alterada");
Application.Exit();
}
else if(DateTime.Now >= this.FechaVencimiento())
{
MessageBox.Show("Demo vencida");
Application.Exit();
}
else
{
//Abra su aplicacion aqui
}
Con este mismo principio puede crear otras limitaciones a su Demo, por ejemplo controlar una cantidad de registros en su tabla de clientes o facturas, que si llega a 10 registros la demo dejara de funcionar, etc.
ResponderBorrar@ El Gordo, Si lo que quieres que se te abra una ventana que muestre la ayuda, a traves del menú o algun boton:
ResponderBorrartienes que poner un control que se llama "HelpProvider"
en la propiedad HelpNameSpace del control, le debes decir la ruta de donde se encuntra la Ayuda.
por ultimo poner este codigo en el evento click del boton o Menu:
Help.ShowHelp(Me, HelpProvider1.HelpNamespace)
Hey JN# tengo este codigo en C# Console.ForegroundColor = ConsoleColor.blue;
ResponderBorrary el fondo no se me pone azul, es que lo estoy empleando mal
@Claro saludos.... medianamente está mal... el compilador desconoce blue... porque dentro del Collection de coleres de ConsoleColor no existe... recuerda que C# es un lenguaje estructurado y distingue Mayúsculas de Minúsculas.... y un poco más allá las propiedades, nombres de clases, identificadores... empiezan con Mayúsculas... otra cosilla... el ForegroundColor es para la Fuente, la propiedad que buscas es BackgroundColor.
ResponderBorrarPrueba esto:
ResponderBorrarSystem.Console.BackgroundColor = System.ConsoleColor.Blue;
System.Console.ForegroundColor = System.ConsoleColor.White;
System.Console.Clear();
System.Console.WriteLine("Un ejemplillo para @El Claro");
System.Console.ReadKey();
@ Aybar este ejemplo no me hace lo que quiero, lo que busco es que la pantalla completa se me ponga azul, no la parte donde hay texto.
ResponderBorrarPara lograr lo que quieres tendras que importar un .dll de windows (kernel32.dll) y llamar el metodo SetConsoleTextAttribute. En la página http://www.c-sharpcorner.com/UploadFile/kashifbilal/ColoringTheConsole12192005015120AM/ColoringTheConsole.aspx explica todo detalladamente. Espero te sirva.
ResponderBorrarSaludos,
La forma mas simple de cambiar el color del background completo es la siguiente: right click sobre la barra de titulo, luego properties. Luego teniendo la opcion Screen Background seleccionada escoge el color azul que quiere. Por ultimo cuando le de OK le sandran dos opciones, seleccionara la que dice: Save properties for future windows with same title.
ResponderBorrarEsto es otra forma de resolver tu problema.
Cuando hablo de barra de titulo me estoy refiriendo a la CONSOLA, es decir cuando usted corra su programa de CONSOLA es que hara los pasos antes dados. Una vez hecho eso siempre su consola lucira con los colores especificados.
ResponderBorrar@Claro... debe verifcar la instalación de la Versión del Visual Studio que usa.... deme su correo para enviarle un demo con el ejemplo que le suministré... el mio es aybarpedro@hotmail.com
ResponderBorrarComparto un pequeño código que tuve que hacer hoy para hacer copias de objetos que son referencias y poder modificar las copias sin afectar los objetos originales. Este código solo es aplicable si el objeto que se desea copiar es serializable. Anexo la clase y un programa pueda para quien pueda interesar. Salu2.
ResponderBorrarNOTA: lo subo en dos partes porque no cabe todo en un solo comentario
Primera parte:
[Serializable]
public class Duplicable<T>
{
/// <summary>
/// Duplica el objeto y devuelve una nueva instancia del mismo.
/// </summary>
/// <returns>Duplicado del objeto.</returns>
public T Duplicar()
{
//Se crea un objeto serializador en formato binario.
BinaryFormatter bf = new BinaryFormatter();
//Se crea un memory stream el cual alojará el objeto serializado.
MemoryStream ms = new MemoryStream();
//Se serializa el objeto.
bf.Serialize(ms, this);
//Se ajusta la posición del stream al inicio para poder deserializar el objeto.
ms.Seek(0, SeekOrigin.Begin);
//Se devuelve el objeto deserializado lo que obliga a crear una nueva instancia del mismo.
return (T)bf.Deserialize(ms);
}
/// <summary>
/// Duplica el objeto que se pasa como parametro y devuelve una nueva instancia del mismo.
/// </summary>
/// <param name="objeto">Objeto a duplicar.</param>
/// <returns>Duplicado del objeto.</returns>
public static T Duplicar(T objeto)
{
//Se crea un objeto serializador en formato binario.
BinaryFormatter bf = new BinaryFormatter();
//Se crea un memory stream el cual alojará el objeto serializado.
MemoryStream ms = new MemoryStream();
//Se serializa el objeto.
bf.Serialize(ms, objeto);
//Se ajusta la posición del stream al inicio para poder deserializar el objeto.
ms.Seek(0, SeekOrigin.Begin);
//Se devuelve el objeto deserializado lo que obliga a crear una nueva instancia del mismo.
return (T)bf.Deserialize(ms);
}
}
Segunda parte:
ResponderBorrarusing System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
using System.Threading;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace TestProgram
{
class Program
{
static void Main(string[] args)
{
//Ajusto la cultura a España para que las fechas se lean correctamente ("MM-dd-yyyy HH:mm:ss")
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("es-ES");
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("es-ES");
//Se crea y se imprime el objeto base para realizar la copia
Persona p1 = new Persona("Fernando", "Alvarez", DateTime.Parse("02/09/1985"));
Console.WriteLine("La persona original es:\n");
p1.Imprimir();
//Se copia el objeto base y se vuelve a imprimir en pantalla
Persona p2 = p1.Duplicar();
Console.WriteLine("La persona copia es:\n");
p2.Imprimir();
//Se crea otro objeto persona igualandolo al objeto base
Persona p3 = p1;
Console.WriteLine("La persona referencia es:\n");
p3.Imprimir();
//Se modifica el objeto base para ver que el copia no se afecta
p1.Nombre = "Pedro";
Console.WriteLine("La persona original se ha cambiado:\n");
p1.Imprimir();
//Se indica que al modificar el objeto base, la copia no se afecta ya que no es una referencia
Console.WriteLine("La persona copia sigue siendo la misma:\n");
p2.Imprimir();
//Se indica que al modificar el objeto base, la referencia se ve afectada
Console.WriteLine("La persona referencia ha cambiado:\n");
p3.Imprimir();
//Evita que se cierre la consola
Console.ReadKey();
}
}
/// <summary>
/// Clase persona
/// </summary>
[Serializable]
class Persona : Duplicable<Persona>
{
private string nombre;
public string Nombre
{
get { return nombre; }
set { nombre = value; }
}
private string apellido;
public string Apellido
{
get { return apellido; }
set { apellido = value; }
}
DateTime fechaNacimiento;
public int Edad
{
get
{
//Se calcula la edad a partir de la fecha de nacimiento
DateTime dFechaActual = DateTime.Now;
TimeSpan tsEdad = dFechaActual.Subtract(fechaNacimiento);
DateTime dEdad = DateTime.MinValue + tsEdad;
return dEdad.Year - 1;
}
}
public Persona() { }
public Persona(string nombre, string apellido, DateTime fechaNacimiento)
{
this.nombre = nombre;
this.apellido = apellido;
this.fechaNacimiento = fechaNacimiento;
}
public void Imprimir()
{
Console.WriteLine("Nombre: " + this.Nombre);
Console.WriteLine("Apellido: " + this.Apellido);
Console.WriteLine("Edad: " + this.Edad);
Console.WriteLine();
}
}
}
@JN# eoo como esta usted tocayo y esta vacaciones como estan
ResponderBorrarme pueden ayudar con este trabajo para el instituto por favor soy novato en esto.
ResponderBorrarIngreso Alumno
Permitir el ingreso de información relacionada con los alumnos de una institución, es necesario registrar los siguientes datos para cada alumno ingresado:
Rut
Nombre
Apellido
Edad
Fecha de Nacimiento
Sexo
E-mail
Fono contacto
Carrera seleccionada
La cantidad de alumnos debe ser definida por el usuario una vez requiera utilizar la aplicación, no es necesario completar el ingreso del total de los alumnos para realizar consultas.
Las consultas a este nivel solo corresponden a consultas básicas ejemplo:
Cantidad de alumnos matriculados
Consultas individuales por rut para verificar por ejemplo que exista el alumno o en qué carrera se encuentra inscrito.
Ingreso Notas
Además se solicita el ingreso de cuatro notas en total para cada alumno existente en el sistema, todas las notas deben ser ingresadas y el formato corresponde desde el 1.0 al 7.0.
Consultas
Con todos los datos de un alumno debemos proveer información estadística para los directores de la institución, información como:
Cantidad de alumnos mujeres y hombres matriculados. Qué porcentaje representan cada uno.
Qué carrera cuenta con más mujeres u hombres matriculados.
Que cantidad de aprobados y reprobados, además el porcentaje que representan.
Tener alguna relación con la edad por ejemplo por carrera.
Se solicita proveer una solución para el requerimiento descrito anteriormente.
Observaciones
El máximo de ingresos es determinado por el usuario.
Cada vez que se realice una operación se debe consultar si se desea continuar “Si”para continuar en la opción seleccionada “No” para volver al menú principal.
Si los arreglos utilizados en el desarrollo no contiene datos, no se debe permitir la opción de visualización o consultas indicándolo en un mensaje.
Lo sentimos amigo #fabi, Nosotros ayudamos a resolver problemas puntuales como errores, mejores practicas en códigos, etc., pero NO hacemos 'tareas'. Disculpa los inconvenientes por no poder ayudarte en ese sentido. Empieza a hacer tu tarea, y cuando tengas dudas de como hacer algo "puntual" o tengas algún error, etc, entonces nos escribes y con gusto te ayudaremos.
ResponderBorrarA desarrollar una aplicación visual que dé solución a un problema en el que esté presente el polimorfismo a partir de la identificación de los métodos virtuas,clases y métodos abstractos presentes en las solucioón del mismo.
ResponderBorrarimplementar las clases parques, Aparatos , AparatosNinnos y AparatosAdultos.