Monday, 31 January 2011

Centrar el texto de una columna en un DataGridView en C# y VB.NET

Centrar el texto de una columna tiene una desventaja y es que no es posible ordenar las columnas

C#


private void form_load()
{

// primero asignar las columnas como no sortables, osea, no ordenables
dgv1.Columns["nombre_columna"].SortMode = DataGridViewColumnSortMode.NotSortable;

// segundo asignarle que se centre el texto de la columna
dgv1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

}



VB:NET


Private Sub form_load()

' primero asignar las columnas como no sortables, osea, no ordenables
dgv1.Columns("nombre_columna").SortMode = DataGridViewColumnSortMode.NotSortable

' segundo asignarle que se centre el texto de la columna
dgv1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter

End Sub




Publicado en tttony.blogspot.com

Validar columnas de solo números o mayúsculas en DataGridView en C# y VB.NET

Es posible manejar la entrada de datos en cada columna del control DataGridView, usando el evento EditingControlShowing de dicho control, y es muy sencillo, así evitas por ejemplo en una columna que solo introduzcan letras mayúsculas que Copien&Peguen caracteres en minúsculas o que solo el campo sea numérico

En mi caso yo uso el tipo de columna, por ejemplo si la columna es numérica entonces asignarle el evento de solo números y si es alfa-numérico en mayúsculas le asignas la propiedad CharacterCasing a Upper ya que como sabras, las columnas de textos son simplementes TextBox

C#
/* * Creado por tttony 2010 * http://tttony.blogspot.com/ * * POR FAVOR NO BORRES ESTE COMENTARIO */

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{

if (e.Control is TextBox)
{
TextBox txt = e.Control as TextBox;

// Si la columna es numerica
if (object.ReferenceEquals(dataGridView1.CurrentCell.ValueType, typeof(System.Int32)))
{
// Asignar el evento de solo numeros a las columnas numericas
txt.KeyPress += OnlyNumbers_KeyPress;
}
else // o texto
{
/*
* Quitar el EventHandler del KeyPress para que permita escribir texto
*/
txt.KeyPress -= OnlyNumbers_KeyPress;
((TextBox)(e.Control)).CharacterCasing = CharacterCasing.Upper;
}
}
}

private void OnlyNumbers_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != 8) // Si no es numerico y si no es espacio
{
// Invalidar la accion
e.Handled = true;
// Enviar el sonido de beep de windows
System.Media.SystemSounds.Beep.Play();
}
}


VB.NET


Private Sub dataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs)

If TypeOf e.Control Is TextBox Then
Dim txt As TextBox = TryCast(e.Control, TextBox)

' Si la columna es numrica
If Object.ReferenceEquals(dataGridView1.CurrentCell.ValueType, GetType(System.Int32)) Then
' Asignar el evento de solo numeros a las columnas numericas
AddHandler txt.KeyPress, AddressOf OnlyNumbers_KeyPress
Else
' o texto
'
' * Quitar el EventHandler del KeyPress para que permita escribir texto
'

RemoveHandler txt.KeyPress, AddressOf OnlyNumbers_KeyPress
DirectCast(e.Control, TextBox).CharacterCasing = CharacterCasing.Upper
End If
End If
End Sub

Private Sub OnlyNumbers_KeyPress(sender As Object, e As KeyPressEventArgs)
If Not [Char].IsDigit(e.KeyChar) AndAlso e.KeyChar <> 8 Then
' Si no es numerico y si no es espacio
' Invalidar la accion
e.Handled = True
' Enviar el sonido de beep de windows
System.Media.SystemSounds.Beep.Play()
End If
End Sub


FUENTE

Publicado en tttony.blogspot.com

Thursday, 27 January 2011

Centrar un formulario en C# y VB.NET

Los formularios tienen una propiedad, que puedes usar para centrar el formulario cuando este se muestra:

form1.StartPosition = FormStartPosition.CenterScreen;


El detalle con esto es que si por ejemplo, quieres modificar el tamaño del formulario cuando se cargue, la propiedad StartPosition no nos servirá

C#
/* * Creado por tttony 2010 * http://tttony.blogspot.com/ * * POR FAVOR NO BORRES ESTE COMENTARIO */

private void form_Load(object sender, EventArgs e)
{

this.Width = 333;

// esto no funciona
form.StartPosition = FormStartPosition.CenterScreen;
}


Así que puedes usar este código para centrarlo basándose en el tamaño de tu monitor:

C#
/* * Creado por tttony 2010 * http://tttony.blogspot.com/ * * POR FAVOR NO BORRES ESTE COMENTARIO */

private void form_Load(object sender, EventArgs e)
{

this.Width = 333;

/*
* Centrar el formulario
*/
int boundWidth = Screen.PrimaryScreen.Bounds.Width;
int boundHeight = Screen.PrimaryScreen.Bounds.Height;
int x = boundWidth - this.Width;
int y = boundHeight - this.Height;
this.Location = new Point(x / 2, y / 2);

}



VB.NET
/* * Creado por tttony 2010 * http://tttony.blogspot.com/ * * POR FAVOR NO BORRES ESTE COMENTARIO */

Private Sub form_Load(sender As Object, e As EventArgs)

Me.Width = 333

Dim boundWidth As Integer = Screen.PrimaryScreen.Bounds.Width
Dim boundHeight As Integer = Screen.PrimaryScreen.Bounds.Height
Dim x As Integer = boundWidth - Me.Width
Dim y As Integer = boundHeight - Me.Height
Me.Location = New Point(x \ 2, y \ 2)

End Sub


Publicado en tttony.blogspot.com

Infracción de concurrencia: DeleteCommand o UpdateCommand en C# o VB.NET

Si tienes este error:

Infracción de concurrencia: DeleteCommand o UpdateCommand afectó a 0 de los 1 registros esperados."


Ya sea agregando o editando un registro, es porque seguro esa tabla tiene un Id auto numérico y cuando intentas borrar o editar un registro recién guardado el nuevo Id no es retornado a menos de que lo hagas explícitamente, aqui hay un ejemplo de un registro recién agregado a un DataGridView:



Como puedes ver el Id auto numérico no es guardado

Yo intenté solucionarlo tratando de que sea lo mas sencillo posible y encontré que la mejor forma(en este caso para mi) fué, volver a cargar lo datos nuevamente después de agregarlo, algo así:

Pseudo-código:



Agregar_registro();
Recargar_registros(); // <-- Aqui se vuelve a actualizar



Esta es una manera que me funciona bien hasta los momentos si tienes una mejor por favor comentala

Publicado en tttony.blogspot.com

Tuesday, 25 January 2011

Convertir un numero entero en cadenas en Access

Supongamos que tienes una tabla con un campo numérico único con los siguientes valores:

11083623
11083721
11083832
11083952
11095589
11097893
11099432


Usando esta sentencia SQL:

SELECT * FROM table WHERE id = 11083832


Solo encontrarás esa fila con el id 11083832

Ahora bien, si sólo quieres buscar mas de una fila, por ej. que contenga: 11083, no es posible ya que es un numero y solo puedes usar los siguientes operadores: < > = <= >=, así que tendrás que convertir ese campo id en cadena en la consulta, de ésta manera:

SELECT * FROM table WHERE CStr(id) LIKE '%11083%'


Con eso puedes hacer búsquedas de más de un número

Publicado en tttony.blogspot.com

Friday, 7 January 2011

Pasos para eliminar virus



Antes de empezar



Hazlo bajo tu propia responsabilidad


Si buscas en la web te encontraras con varias paginas que te enseñan a eliminar virus, que a a la final no son 100% efectivos, se sabe que no existe ni existirá un antivirus 100% efectivo, el único antivirus efectivo es el humano, pero tiene una desventaja... el tiempo, puede consumir tiempo

Estos virus normalmente son descargados por el usuario, ya sea por correo electronico, descarga de una web, etc. y sin darse de cuenta este puede ejecutarse, en su mayoría no llaman la atención(obvio no???), es decir, que no muestran ninguna ventana ni mensaje, estos se ejecutan en segundo plano y pueden duplicarse, se auto ocultan y muchas veces no dejan que el usuario deje ver los archivos ocultos, ademas están pendientes de unidades de almacenamiento como por ejemplo pendrives USB para infectarlos y así multiplicarse en la red

También existen en la red herramientas específicas para cada virus, esto es así cuando ningún antivirus en este caso no pueda eliminarlo, en su mayoría no lo puede eliminar sí se está ejecutando, ya que éste cuando se manda a cerrar por ej. con el Administrador de Tareas, el virus se auto-ejecuta de nuevo y eso es bastante fastidioso

Al grano, esta es una manera que me ha sido efectiva, el detalle es que puede ser algo tediosa, hay que ser muy paciente porque no se sabe lo que puede pasar, mientras vas avanzando vas entendiendo como el comportamiento del virus



Ejemplo real del comportamiento de un virus




Este es un ejemplo del comportamiento de un virus, recientemente me tope con un virus que estaba en un GPS, subi el archivo ejecutable a VirusTotal y este es el resultado, click en la Pestaña: Informacion de Comportamiento

Como pueden ver, VirusTotal analiza el comportamiento del archivo ejecutable y nos muestra lo que hace el virus en Windows: se duplica, crea y lee archivos, crea procesos, hace llamadas a archivos DLLs y hasta incluso se conecta por internet, usando el protocolo TCP


Herramientas


  1. Hiren's Boot y quemalo en un CD
  2. Process Explorer 
  3. Autoruns 
  4. Unlocker
  5. HiJackThis
  6. CCleaner
  7. Desocultador de archivos, contiene un archivo .bat que he creado para desocultar archivos/carpetas usando el comando attrib de Windows

Los virus se auto-ocultan y ademas pueden restablecer la opcion Mostrar archivos ocultos, asi que si intentas ver los archivos ocultos veras que no los puedes ver porque inmendiatamente el virus establece la opcion No mostrar archivos ocultos


Opcion 1



Viendo esto muy tedioso pienso que le mejor manera es borrar ese virus y es con estas dos herramientas: Process Explorer + Unlocker

Activa la opcion de Mostrar archivos ocultos, en el explorador de Windows, ve al menu

Organizar -> Opciones de carpeta y busqueda -> Activa la opcion: Mostar archivos, carpetas y unidad ocultos -> Click en: Aplicar

Tambien desactiva la opcion que esta mas abajo:  Ocultar archivos protegidos del sistema operativo




1. Ejecuta Process Explorer




2. Colocar el puntero del mouse encima del proceso sospechoso, en este caso el mio es virus.exe (es un programa de ejemplo que he creado en C++ Builder)




Te muestra el directorio donde esta alojado el proceso sospechoso, muchos virus se alojan alli

3. Abre el directorio donde esta alojado ese proceso
4. Click derecho dobre el archivo y selecciona Unlocker
5. En la caja de opciones selecciona Eliminar, en algunos casos el archivo no sera eliminado inmediatamente y requerira reiniciar Windows, Unlocker se encarga de mandarlo a eliminar antes de iniciar Windows

Muchos casos los he solucionado de esta manera pero como he dicho anteriormente, los virus se auto-copian y se guardan en otros directorios


Opcion 2



Esta opcion es usando el Hiren's Boot, si ya sabes donde se aloja/n el/los virus usando el ProcessExplorer o tambien con el HiJackThis

  1. Inicia el PC con el CD de Hiren's
  2. Selecciona la opcion de Mini Windows XP
  3. Click en MiPC y abre la unidad de disco que este infectada
  4. Mini Windows XP ya tiene la opcion de ver los archivos ocultos asi que abre el directorio donde se encuentra el virus y borralo/s
  5. Listo, al iniciar el PC ya no deberia de ejecutarse el virus 

 

Opcion 3


  1. Ejecuta HiJackThis
  2. Click en: Do system scan and save a log file
  3. Al final de la ejecucion se abrira el archivo log que contendra informacion acerca de los programas y servicios que se inician en Windows
  4. Sigue los pasos de la Opcion 1 para eliminar los virus

 

Opcion 4



1. Inicio -> Ejecutar: msconfig
2. Pestaña: Inicio de Windows
3. Te mostrara una lista con los programas que inician con Windows




4. Como ven en la imagen, hay una entrada con un nombre raro, si hay otros nombres que no conoces, usa Google para saber que programa es
5. Desactiva la opcion (aunque el virus puede darse de cuenta y volver a activar la opcion)

6. Dirigete al directorio donde se encuentra el virus y eliminalo, si no se elimina, usa Unlocker
7. Tambien puedes ver la pestaña Servicios y ver si hay algun servicio sospechoso
8. Si el virus no se elimina, incluso con el Unlocker, elimina el archivo usando la Opcion 2


La ultima opcion



Es formatear y despues de eso, si haz hecho un respaldo de la informacion, escanea esos archivos con un antivirus, los antivirus de ahora tienen al menos 30 dias de prueba, entre los antivirus mas recomendados estan

  1. Kaspersky
  2. Avast
  3. Avira
  4. Bitdefender
  5. G-Data
  6. F-Secure


En AV Comparatives puedes conseguir informacion acerca de los antivirus actuales, esta ingles

Tambien existe VirusTotal que recientemente fue adquirida por Google, permite cargar archivos a esa web y analizarlo online, escanea dicho archivo con varios antivirus actualizados


Publicado en tttony.blogspot.com

Thursday, 6 January 2011

Detectar si Windows esta en Modo Seguro con C# y VB.NET

Desde aplicaciones .NET puedes detectar si el Windows esta siendo ejecutando en Modo seguro, con la clase SystemInformation

Tienes tres modos:

1. Normal: inicio de Windows normal
2. Modo seguro(FailSafe): inicio de Windows en modo seguro
3. Modo seguro con funciones de red:(FailSafeWithNetwork): eso mismo

Ejemplo:

C#

BootMode mode = SystemInformation.BootMode;

if (mode != BootMode.Normal)
{
MessageBox.Show("Este programa no puede ejecutarse en modo seguro. Cerrando...");
Application.Exit();
}


VB.NET

Dim mode As BootMode = SystemInformation.BootMode

If mode <> BootMode.Normal Then
MessageBox.Show("Este programa no puede ejecutarse en modo seguro. Cerrando...")
Application.[Exit]()
End If


FUENTE


Publicado en tttony.blogspot.com

Sunday, 2 January 2011

Problemas con wireless USB D-Link DWA-110



SOLUCION:
En la pagina oficial de D-Link ya no hay mas actualizaciones del controlador, peeeero segun WhoCrashed el controlador pertenece a la compañia Ralink que no es mas que la compañia que fabrica los chips wireless, entonces busque en su pagina oficial http://www.ralinktech.com/ y encontre una nueva actualizacion del dichoso driver 4.00.03.0000, ya lo baje y lo acabo de instalar ahora uds. pueden bajarselo en esta pagina (ahora ya no se llama Ralink sino MediaTek) y buscan:

USB (RT257x /RT2671 /RT520x)

Pesa unos 27MB y soporta: Windows 2000, XP, Vista y 7



POST ORIGINAL: (OBSOLETO)

ACTUALIZACION3 05/06/2011: despues de tanto tiempo probando pues no me dió mas problemas usando el driver de RaLink que esta mas abajo, tenia un equipo AMD ahora poseo un i5 y no me ha dado mas problemas aunque todavia no estoy seguro si era por algun problema con el equipo AMD, pero todo esta bien por ahora



ACTUALIZACION: el problema persiste, el equipo esta impredecible, puede trabajar bien durante un tiempo pero de repente, se cuelga o da un pantallazo azul, he tenido en este mes de Enero como 5 pantallazos azules (jugando o sin jugar) y unos ~7 cuelgues (navegando en internet) y estoy casi seguro de que es este aparato que me esta ocasionando estos problemas y no soy el unico asi que no creo que sea otro componente de mi equipo ya que he jugado sin problemas en DiRT2 y COD7, pero despues de instalar esta cosa no he podido jugar y eso que lo necesito... asi que sigo buscando solucion ya que no me planteo un formateo

ACTUALIZACION2 05/02/2011: a la final formatee el equipo ya que no aguantaba este problema aunque los pantallazos azules persisten como dije en la ACTUALIZACION de arriba, buscando y buscando "parece" que encontre la solucion a este problemon que no me ha dejado trabajar ya que aleatoriamente se me colgaba (aunque eso se puede deber a otro problema) bueno como dije encontre al parecer la solucion gracias a este programa WhoCrashed, es un lector de archivos .dmp que son generados despues de los pantallazos azules y encontro que el archivo dnetr7364.sys que es el controlador del wirelees DWA-110 version 4.00.02.0000 esta causando los benditos pantallazos azules de la muerte:





Yo por ahora lo estoy probando y no me ha dado pantalla azul hasta el momento y espero que no porque ya estoy cansado...

POST ORIGINAL OBSOLETO:

Si tienes repentinos cuelgues o pantallazos azules en Windows 7 x64 con el BCCode BCCode 1A es posible que este dispositivo este causando el problema

El Windows 7 ya viene con muchos drivers listos para usarse, si haz usado el driver que viene por defecto para el D-Link DWA-110, eso es lo que esta causando el problema, tan solo tienes que instalar el de la pagina oficial de D-Link y descargarte el driver aqui



Publicado en tttony.blogspot.com