Mostrando entradas con la etiqueta WPF. Mostrar todas las entradas
Mostrando entradas con la etiqueta WPF. Mostrar todas las entradas

jueves, 6 de febrero de 2014

GIF animado en WPF (animación continua)

Hace tiempo que quería colocar una especie de espera mientras se carguen los datos del servidor, se me ocurrió varias cosas, pero con el fin de optimizar la velocidad y no consumir recursos al final decidí colocar una especie de manto negro semitransparente que inhabilitara los demás controles con un simple gif animado que dijera "Cargando....".

Parecía fácil, pero no fue tanto así, por ahí googleando encontré 2 soluciones referenciar Windows Forms con un PictureBox, que no es lo mio mezclar WinForms con Ventanas WPF, y lo otro utilizar un control WPF llamado MediaElement que parecia lo mas coherente:

<MediaElement LoadedBehavior="Play" Source="file://C:/anim.gif" />

Problema: Solo reproduce 1 vez el gif animado y luego se detiene.

Seguí navegando por ahí y encontré código adicional, que permite un loop infinito en MediaElement, pero solo sirve para vídeos o sonido y no aplica a gif animados.

De tanto buscar y no encontrar, no podía creer que ha nadie le haía pasado esto antes, al final estaba decidido a crear un control nativo wpf que permita resolver este problema, pero encontré la solución ya que algún lunatico había inventado la rueda antes que yo (gracias por ahorrarme gastar mi teclado).

Descarga de esta pagina http://wpfanimatedgif.codeplex.com/releases una demo de como funciona, incluye una dll (el momento de escribir esta la versión estable es la 1.4.4) que sirve para agregar a tus proyectos.

Agrega una referencia en tu proyecto a esta DLL y modifica es esta manera tu xaml, mejor te dejo una captura.


y vuala, ya tienes un GIF animado continuo.



lunes, 30 de diciembre de 2013

Cerrar u ocultar ventana desde otra ventana WPF con VB 2010

Me he visto en esta situación debido a que muchas de las cosas que son fáciles y cotidianas manejando formularios en VB, no tan similares a manejar ventanas WPFs.

Bueno al grano, este es el código del botón de la ventana principal que abrirá la segunda ventana, y de la 2da. ventana mediante un botón manipularemos la primera ventana.


Aquí el código del botón de la 2da ventana, que manipulara la 1ra. ventana, en este caso lo que estoy haciendo es esconder la primera ventana, si quieres cerrar la primera ventana, lo único que tienes que hacer es cambiar la palabra "Hide" por la palabra "Close".


Eso es todo...

Chao.

jueves, 29 de agosto de 2013

Obtener el valor del item seleccionado del ListBox o ComboBox en C# WPF

Es habitual que además de añadir una cadena al ListBox o ComboBox añadamos o relacionemos también un valor numérico con dicha cadena. También sucede que al recuperar, por lo menos los que estamos acostumbrados a VB quisiéramos recuperar el valor de esta forma ListBox1.SelectedValue, sin embargo esto no funciona en controles WPF, pero aquí les dejo la forma de recuperar el valor (no la cadena que puede ser visualizada) en 2 lineas.

Si es un ListBox,

string valor = ((System.Data.DataRowView)ListBox1.SelectedItem).Row.ItemArray[0].ToString();
MessageBox.Show(valor);

Si es un ComboBox

string valor = ((System.Data.DataRowView)ComboBox1.SelectedItem).Row.ItemArray[0].ToString();
MessageBox.Show(valor);

(editado)
Si por si caso te preguntas como recuperar la cadena que has seleccionado

string valor = ComboBox1.SelectedItem.ToString();
MessageBox.Show(valor);

miércoles, 28 de agosto de 2013

Error extraño en C#

No se que paso, prácticamente es el mismo código, cuando me apareció el error "No se puede utilizar como método el miembro 'System.Data.DataSet.Tables' no invocable", busque por internet la solución y no encontré nada.

Lo bueno es que lo arregle, probando todo tipo de código que encontré por ahí, y al final encontré uno que funcionaba todo chevere, copie linea por linea en el que me daba error, y lo gracioso es que me sigue dando error.

El código de arriba, se encuentra en un botón (el que esta mal) y el otro en otro botón en la misma ventana WPF, son completamente iguales solo que no se porque en el primer caso me da error.



viernes, 18 de enero de 2013

Solo lectura en Gridcontrol

La verdad no encontré para que todo el control sea solo en modo lectura, pero puedes colocar cada columna en forma independiente en modo lectura de la siguiente forma.

GridControl1(1).ReadOnly = True

donde 1 es en numero de la columna, o también puedes poner el nombre de la columna.

Si quieres que toda la tabla sea en modo lectura, pon esto.


 For NCol = 0 To GridControl1.Columns.Count - 1
            GridControl1.Columns(NCol).ReadOnly = True
Next

jueves, 10 de enero de 2013

Modificar app.config - Cadena de Conexión

Para aclarar estoy usando Visual Basic 2010 y WPF, sin embargo el WPF no interviene en el código que utilizare, así que los que utilizan Formularios no tendrían problema alguno.

Para empezar abrimos el app.config.


Añadan una conexion con el Nombre "CadenaConexion", el connectionString coloquen lo que sea, al final va ser modificado por nuestra aplicacion, y en providen name pueden colocar "System.Data.SqlClient" para los que utilizan Sql Server o "MySql.Data.MySqlClient" para los que utlizan MySQL, al final tampoco importa mucho ya que también sera modificado por nuestra aplicacion.


Crea una ventana o formulario con una caja de texto (TextBox) con el nombre o name "TBcadena" y un Botón con el nombre de "BTActualizar", entra al evento Clic del botón y coloca este código.


Como veras el boton esta llamando a un procedimiento llamado CambiarCNX y donde se le envía un parámetro de tipo string, en este caso le estamos pasando el contenido del TextBox.

El codigo del procedimiento es este.


Ya estaría, si quieres verificar si resulto, porque muchos ESTOY SEGURO que al fijarse en su app.config no ven cambio alguno, les comento que al momento de ejecutar crea su propio app.config y esta dentro del la carpeta bin o debug.

Y NO precisamente se llama app.config, tiene el nombre del proyecto con la extensión vshost.exe (no es un EXE es un XML) y se puede abrir con el Bloc de Notas o NotePad


Listo, esito sería.

---------------------------------------------------------------------------------------

Yo no sabia pero me entere, así como nosotros podemos abrir con un Bloc de Notas, otros también podrían hacerlo no te parece, podrian ver nuestro usuario, lo peor ver la contraseña de acceso.

Para que te calmes tambien se puede guardar encriptado de la siguiente forma.

Este es el código de procedimiento CambiarCNX, ves alguna diferencia...


Exacto, al final aumente una llamada a otro procedimiento, el que me encripta los datos y su código es este.


Ahora si, fíjate tu supuesto app.config que en realidad tiene otro nombre y se encuentra en la carpeta Bin o Debug. Solo veras garabatos.

Ahí te ves.....

martes, 31 de julio de 2012

Timer en WPF VB 2010

En mi lucha de pasar de VB con formularios a WPF, encontré muchas preguntas y pocas respuestas.

Este es uno de estos casos, te habrás dado cuenta que en las herramientas de WPF no existe la herramienta Timer o algo parecido, no me quedo mas que googlear por ahi buscando información, encontré mucha información respecto a este tema llamado DispatcherTimer, que se utiliza en WPF, pero casi en todos no te indican como implementarlo.

Seguí escarbando por ahí y encontré un código completo en C#, sin embargo al convertirlo a VB, este me dio errores, busque como resolver el error que me enviaba el programa, pero la solución  agrando el problema.

Bueno despues de probar muchas cosas, al fin lo hize funcionar asi que lo publico, porque estoy seguro que a muchos como yo, les va a pasar lo mismo.

Ojo: estoy utilizando Visual Basic 2010 y Windows 7


1. Crea una ventana WPF
2. Coloca un  listBox con el nombre por defecto "ListBox1"
3. Coloca un boton
4. Importa en nameSpace System.Windows.Threading
5. Crea el siguiente procedimiento

6. Dentro el botón escribe este código


 ya esta ejecuta presiona el botón y veras que cada segundo aparece la hora en el ListBox


ESTE SERIA EL CÓDIGO COMPLETO PARA LOS QUE NO ME ENTENDIERON O SE PERDIERON POR AHÍ.


Si por acaso criticaste, que debería haber colocado el codigo y no imagenes, pues es para que escribas y se te quede grabado, aunque ya se que lo sabes, solo aprendes practicando, si haces copiar y pegar, pues te quedas ahi nada mas, (eso es por si acaso "al que le quede el guante que se lo chante").