Archivo de la etiqueta: Visual c#

Ajustar color de la fuente según el color de fondo en Visual C#

En ocasiones podemos necesitar ajustar el color de la fuente según el color del fondo del control. Por ejemplo poner el color de la fuente a blanco, por que el color del fondo es negro, o de cualquier otro color oscuro.

Esto se puede hacer calculando en nivel del color. Para este calculo yo utilizo la siguiente formula.

double coefienteOscuridad = 0.2126 * color.R + 0.7152 * color.G + 0.0722 * color.B;

Lo que hacemos es crear un coeficiente multiplicando cada valor de los calores básico por un coeficiente, ya que según el color básico hará que el color final sea mas o menos oscuro. Y por ultimo sumamos los resultado.

Según el valor devuelto podemos jugar con el color que deseemos.

Por ejemplo, si el coeficiente “coefienteOscuridad” es superior a 100, el color de la fuente sera negro, y por el contrario si el coeficiente es inferior el color de la fuente lo pongo a blanco.

El valor 100 lo he sacado de probar diferentes colores y ver como se distingue el texto.

Podemos jugar con el para ajustar el color de la fuente al color que más se ajuste a nuestras necesidades.

Ejemplo completo, en este ejemplo ajusta el color de la fuente, ha blanco o negro, de una celda de un dataGridView según el color de fondo de la celda:

// Calculamos el color de fondo para ajustar el color de la fuente
Color color = e.CellStyle.BackColor;
double coefienteOscuridad = 0.2126 * color.R + 0.7152 * color.G + 0.0722 * color.B;
// Indice de oscuridad
if ( coefienteOscuridad > 100)
{
// si el color es claro, el texto lo ponemos de color negro
e.CellStyle.ForeColor = Color.Black;
}
else
{
// si el color es oscuro, el texto lo ponemos de color blanco
e.CellStyle.ForeColor = Color.White;
}

Y con esto ya tendríamos ajustado el color de nuestra fuente para que sea totalmente legible, independientemente del color del fondo.

Si tienes alguna sugerencia o duda, no tengas ningún reparo en escribir un comentario.

Ejecutar aplicaciones con permisos de administrador en Visual Studio c#

En algunas ocasiones necesitamos que nuestras aplicaciones se ejecuten con lo privilegios de administrador. Para hacer esto en una aplicación desarrollada con Visual C# tenemos que añadir a nuestro proyecto un fichero de “Archivo de manifiesto de aplicación”. Para agregar el fichero, accedemos “Proyecto” – “Agregar nuevo elemento”, y seleccionamos “Archivo de manifiesto de aplicación”.

Captura_Agregar_Nuevo_Elemento

Esto nos creara el fichero “app.manifest”.

Captura_Archivo_manifiesto_aplicacion
Este fichero contiene varias opciones de configuración, pero las opciones que nos interesan son:

<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">

<!-- Opciones del manifiesto de Control de cuentas de usuario

Si desea cambiar el nivel de Control de cuentas de usuario de Windows, reemplace el

nodo requestedExecutionLevel por alguno de los siguientes.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
La especificación del nodo requestedExecutionLevel deshabilitará la virtualización de archivos y del Registro.

Si desea usar la virtualización de archivos y del Registro para la compatibilidad

con versiones anteriores, elimine el nodo requestedExecutionLevel.

-->

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

</requestedPrivileges>

requestedPrivileges
En la parte comentada nos muestra los niveles disponibles:

asInvoke: Nivel de seguridad por defecto.

requireAdministrator: Nivel de seguridad como administrador.

highestAvailable: Nivel de seguridad el mayor posible.

Para indicar que nuestra aplicación va a trabajar con nivel de seguridad de administrador, solo tenemos que copiar la linea:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

requestedExecutionLevel_administrador
de la parte comentada, y sobre escribir:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

de la parte no comentada.

requestedExecutionLevel_administrador_sobreescrito
Después de guardar los cambios, si le damos al botón de “Inicar”, el Visual Studio se reiniciara para ejecutarse con permisos de administrado.

Si ejecutamos el ejecutable de la aplicación nos mostrar la típica ventana para aceptar los privilegios de administrador.

Crear gráficos de datos en c#

graph_fixed_x_rangeLa mejor formar de ver y entender los datos que capturamos desde nuestros sensores, es mediante la utilización de gráficos.

Si trabajamos con C# esta tarea es relativamente sencilla, gracias al controlador que por defecto trae el Visual C#. Este controlador nos permite crear gráficos de diferentes formas, de lineas, tarta, columnas,  puntos, etc.

Los datos se los podemos facilitar tanto en tiempo real añadiéndolos directamente los valores al gráfico, o mediante una base de datos.

Para añadir el gráfico a nuestro formulario solo tendremos que añadir el controlador “Chart” que se encuentra dentro de la sección “Datos”.

Con esto, ya podríamos empezar a mostrar nuestros datos, el tipo de gráfico por defecto es un gráfico de columnas. para añadir los datos solo tendríamos que utilizar el siguiente comando.

chart1.Series[0].Points.addXY(ValorX, ValorY);

Pero el sistema de gráficos de columnas no es que sea el más idóneo para mostrar la información de sensores, lo normal sera utilizar un gráfico de lineas, para cambiar el tipo de gráficos tendremos que ir  a:

  1. Propiedades del gráfico
  2. Series, Seleccionar la serie que queremos modificar (por defecto “Series1”.
  3.   En la sección “Gráfico”, en “ChartType”, seleccionar el tipo de gráfico.
  4.  Pulsar en “Aceptar”, y listo ya tenemos cambiado nuestro tipo de gráfico.

Si lo queremos hacer mediante código, tendremos que introducir la siguiente instrucción:

chart1.Series["Series1"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;

En la parte de “Series[“Series1″]”, en este caso hacemos la llamada utilizando el nombre de la serie, en este caso es el de por defecto “Series1”, también podemos hacer la llamada utilizando su posición en la lista de las series, acordándose que toda lista empiezan en el “0” (cero). Esto “Series[“Series1″]”, y esto “Series[0]”, seria lo mismo.

Y con esto ya tendríamos creado nuestro gráfico y seleccionado el tipo de gráfico para la muestra de datos básica, pero funcional.

Ejemplo simple de lo descrito en el artículo, ejemplo creado con Visual Studio Express 2012: