Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

07/03/2010 #1


crear un control con apariencia de dial C#
Hola:

Necesito crear un control de usuario con apariencia de dial en Microsoft Visual C# Express Edition, como se ven en una de las imágenes que adjunto. La verdad es que hasta hace unos días no tenía ni idea de C#, (y ahora no tengo mucha más), pero en una materia de tiempo real que estoy estudiando, nos exigen tener unas nociones de programación en este lenguaje.

El problema consiste en realizar un programa, que consta de 3 trackbar, cada una de las cuales maneja a la vez dos controles que son creados por el usuario: el depósito y el dial. El depósito nos lo dan hecho como ejemplo, y más o menos lo entendí..... pone un panel y un label, y luego maneja las propiedades etc. Pero es que para el dial..... uffffffffffff no consigo empezar; es que no cosigo ni dibujar los arcos ni el triangulito; creo que se hace con "DrawArc", pero he probado muchos códigos, y aunque no me dan errores ni nada, no me sale absolutamente nada, he puesto un panel y el último código que estoy probando es este:


Código PHP:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 
AISA
{
public 
partial class Dial UserControl
{
public 
Dial()
{
InitializeComponent();
}

private 
void Dial_Paint(object senderPaintEventArgs e)
{

etiqueta.Text String.Format("{0:N2}"Posicion);

int anchoTexto = (int)e.Graphics.MeasureString(etiqueta.Textetiqueta.Font).Width;

etiqueta.Left = (Width anchoTexto) / 2;

dibujaDial();

}

private 
void panel_Paint(object senderPaintEventArgs e)
{

dibujaDial( );
}

private 
void dibujaDial()
{

Pen blackPen = new Pen(Color.Black3);
Rectangle rect = new Rectangle(00100200);
float startAngle 45.0F;
float sweepAngle 270.0F;


Graphics g ;
g.DrawArc(Pen,rect,startAngle,sweepAngle) ; 

}
}

seguramente hay cosas sin sentido, pero lo mío es como un método de prueba y error, porque no me entero mucho de como va esto..... Me he comprado un libro de C#, pero no trae mucho acerca de construir aplicaciones Windows Forms; va mas bien orientado a otros aspectos; me lo estoy leyendo, para coger las nociones del lenguaje, pero ..... no creo que me de tiempo de conseguir resolver esto.


Si alguien pudiese ayudarme a dibujar el dial, es decir del semiarco de colores y el puntero-triangulo, se lo agradecería muchisimo, porque a partir de ahí, podría seguir avanzando en el control, guiándome por el otro ejemplo del depósito; pero sin eso, no soy capaz de hacer nada.....


Muchas gracias de antemano.


Antía.
01/05/2010 #2


Respuesta: crear un control con apariencia de dial C#
Bien..................... he conseguido avanzar bastante en el control. Os pongo el código que define el control de usuario, y una foto para que veais el problema que tengo y que no sé como solucionar: Lo que yo quería era tener en cada instante una sóla línea que apuntase al semicírculo, y eso lo que me hace es que para cada posición me dibuja una línea cada vez, y no borra las anteriores, con lo que al final tengo todo negro..... No sé si alguien prodrá ayudarme.....

Trozo de código en el que puede estar el error:


private void redibujaDial()
{
Graphics g = panel.CreateGraphics();
// Crea un objeto gráfico asociado al panel

iniX = panel.Width / 2;
iniY = panel.Height;


long_linea = panel.Height;

Pen Lapiz = new Pen(Brushes.Black);
Lapiz.Width = 1;



g.DrawLine(Lapiz, iniX, iniY, finX, finY);
g.Dispose(); //eliminamos el objeto para que no ocupe memoria.

}
05/05/2010 #3

Avatar de FRYCK

Respuesta: crear un control con apariencia de dial C#
Muy buen aporte Antia
saludos
05/05/2010 #4

Avatar de Dr. Zoidberg

Respuesta: crear un control con apariencia de dial C#
Antia dijo: Ver Mensaje
Bien..................... he conseguido avanzar bastante en el control. Os pongo el código que define el control de usuario, y una foto para que veais el problema que tengo y que no sé como solucionar: Lo que yo quería era tener en cada instante una sóla línea que apuntase al semicírculo, y eso lo que me hace es que para cada posición me dibuja una línea cada vez, y no borra las anteriores, con lo que al final tengo todo negro..... No sé si alguien prodrá ayudarme.....

Trozo de código en el que puede estar el error:


Código:
private void redibujaDial()
        {
            Graphics g = panel.CreateGraphics();
            // Crea un objeto gráfico asociado al panel

            iniX = panel.Width / 2;
            iniY = panel.Height;

            long_linea = panel.Height;

            Pen Lapiz = new Pen(Brushes.Black);
            Lapiz.Width = 1;

g.DrawLine(Lapiz, iniX, iniY, finX, finY);
            g.Dispose(); //eliminamos el objeto para que no ocupe memoria.

        }
Y no las borra por que tu código no tiene previsto el borrado. Vas a tener que almacenar las coordenadas extremas de cada línea que dibujes, para luego redibujarla con el color de fondo antes de trazar una línea nueva. Si no incluyes eso en tu código, no vas a lograr lo que quieres...y en verdad es bastante simple de hacer, a menos que quieras una animación de alta velocidad usando la técnica del doble buffer, pero me parece excesivo para una aplicación tan sencilla...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.