elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  No me funciona este código que debería
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No me funciona este código que debería  (Leído 3,834 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
No me funciona este código que debería
« en: 13 Marzo 2021, 17:24 pm »

Buenas:

Hago algo mal. En esta captura se muestra unao Panel, que son 8 en total y debe cambiar de color de rojo oscuro o normal dependiendo de como muesves el trackBar.


Verr zoom.

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

namespace _74xx595_Vumetro_01_Net5._0
{
    public partial class Form1 : Form
    {
        int valorADC = 1000;

        public Form1()
        {
            InitializeComponent();
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            // Variar valor con el tarackBar.
            valorADC = int.Parse("" + trackBar1.Value);
            this.Text = valorADC.ToString();

            switch (valorADC)
            {
                case 1000:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.Red;
                    panel6.BackColor = Color.Red;
                    panel7.BackColor = Color.Red;
                    panel8.BackColor = Color.Red;
                    break;

                case 900:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.Red;
                    panel6.BackColor = Color.Red;
                    panel7.BackColor = Color.Red;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 800:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.Red;
                    panel6.BackColor = Color.Red;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 700:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.Red;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 600:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 500:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.DarkRed;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 400:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.DarkRed;
                    panel4.BackColor = Color.DarkRed;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 300:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.DarkRed;
                    panel3.BackColor = Color.DarkRed;
                    panel4.BackColor = Color.DarkRed;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 200:
                    panel1.BackColor = Color.DarkRed;
                    panel2.BackColor = Color.DarkRed;
                    panel3.BackColor = Color.DarkRed;
                    panel4.BackColor = Color.DarkRed;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                default:
                    this.Text = "Fuera de rango.";
                    break;
            }
        }
    }
}

¿Alguna idea?

Saludos.


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.164



Ver Perfil
Re: No me funciona este código que debería
« Respuesta #1 en: 13 Marzo 2021, 21:21 pm »

Pasa que el Switch es muy preciso, es decir, tienes que atinarle a la rayita 1000, 900, 800, etc exactamente para que haga lo que quieres, caso contrario siempre se terminará ejecutando el Default.

En estos casos si que podrías optar por If excluyentes para usar rangos, por ejemplo:

Código
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Drawing;
  4.  
  5. namespace wform {
  6.  public partial class Form1 : Form {
  7.  
  8.    Panel[] pnls;
  9.    Color[] clrs;
  10.  
  11.    public Form1() {
  12.      InitializeComponent();
  13.      pnls = new Panel[] { panel1, panel2, panel3, panel4, panel5, panel6, panel7, panel8 };
  14.      clrs = new Color[] { Color.DarkRed, Color.Red };
  15.      pinta("00000000");
  16.    }
  17.  
  18.    private void trackBar1_Scroll(object sender, EventArgs e) {
  19.  
  20.      int valorADC = this.trackBar1.Value;
  21.      this.Text = valorADC.ToString();
  22.  
  23.      if (valorADC > 900)
  24.        pinta("11111111");
  25.      else if (valorADC > 800)
  26.        pinta("11111110");
  27.      else if (valorADC > 700)
  28.        pinta("11111100");
  29.      else if (valorADC > 600)
  30.        pinta("11111000");
  31.      else if (valorADC > 500)
  32.        pinta("11110000");
  33.      else if (valorADC > 400)
  34.        pinta("11100000");
  35.      else if (valorADC > 300)
  36.        pinta("11000000");
  37.      else if (valorADC > 200)
  38.        pinta("10000000");
  39.      else {
  40.        this.Text = "Fuera de rango";
  41.        pinta("00000000");
  42.      }
  43.    }
  44.  
  45.    private void pinta(string guia) {
  46.      for (int i = 0; i < pnls.Length; i++)
  47.        pnls[i].BackColor = clrs[int.Parse(guia.Substring(i, 1))];
  48.    }
  49.  
  50.  }
  51. }
  52.  


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: No me funciona este código que debería
« Respuesta #2 en: 14 Marzo 2021, 03:52 am »

Ahondando más en la forma que te señala EdePC...

Aparte de tener-meter los paneles en una colección, yo te sugeriría olvidar el string para retener el valor, dado el caso de que con cada opción simplemente aumenta uno más que el anterior afectado por uno u otro color... se puede simplificar y dejar más claro (sin bloque switch), simplemente se calcula  un valor 'x' entre 0-7 según el valor del trackbar...


Código:
x =  ((trackBar1.Value - 300)/100).tointeger)  //(se supone un indice entre 0 y 7 para los paneles)

bucle para index desde 0 hasta x
    panel(index).backcolor = RED
siguiente

Bucle para index con los paneles desde x+1 hasta 7
    panel(index).backcolor = DARK_RED
Siguiente


Quizás fuera más acertado (depende del caso, claro), asignar un color individual a cada panel según el valor. Probablemente los paneles 'más a la derecha del valor', debieran permanecer en gris, y los que esten a la izquierda ofrecer diferentes intensidades de rojo... entre 64 y 255 repartirlo entre los 8 paneles...
algo así:


p.d.: Olvidaba señalarte que para tomar el valor del trackbar, debes eliminar las unidades y decenas, en vez de recurrir a un mayor o menor que'...
Código:
valor = ((Trackbar.value /100).tointeger) * 100)
...con esto entra en los casos de tu switch... si simplemente quieres seguir manteniendo tu código casi íntegro.
« Última modificación: 14 Marzo 2021, 03:57 am por Serapis » En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: No me funciona este código que debería
« Respuesta #3 en: 14 Marzo 2021, 09:37 am »

Buenas compañeros.

Por lo que veo, ya me han respondido. Lo acabé haciendo funcionar. Pero mi código es muy largo, feo y engorroso. No savía que se pudiera simplificar tanto como hicieron arriba. Aún así se los enseño. Es chapuza pero funciona.

Se los dejo como curiosidad. Voy a intertar interpretar lo que hicieron arriba.

Código C#
:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace _74xx595_Vumetro_01_Net5._0
  12. {
  13.    public partial class Form1 : Form
  14.    {
  15.        int valorADC = 1000;
  16.  
  17.        public Form1()
  18.        {
  19.            InitializeComponent();
  20.        }
  21.  
  22.        private void trackBar1_Scroll(object sender, EventArgs e)
  23.        {
  24.            // Variar valor con el tarackBar.
  25.            valorADC = int.Parse("" + trackBar1.Value);
  26.            this.Text = valorADC.ToString();
  27.  
  28.            #region Switch.
  29.            switch (valorADC)
  30.            {
  31.                case >= 1000:
  32.                    panel1.BackColor = Color.Red;
  33.                    panel2.BackColor = Color.Red;
  34.                    panel3.BackColor = Color.Red;
  35.                    panel4.BackColor = Color.Red;
  36.                    panel5.BackColor = Color.Red;
  37.                    panel6.BackColor = Color.Red;
  38.                    panel7.BackColor = Color.Red;
  39.                    panel8.BackColor = Color.Red;
  40.                    break;
  41.  
  42.                case > 900:
  43.                    panel1.BackColor = Color.Red;
  44.                    panel2.BackColor = Color.Red;
  45.                    panel3.BackColor = Color.Red;
  46.                    panel4.BackColor = Color.Red;
  47.                    panel5.BackColor = Color.Red;
  48.                    panel6.BackColor = Color.Red;
  49.                    panel7.BackColor = Color.Red;
  50.                    panel8.BackColor = Color.DarkRed;
  51.                    break;
  52.  
  53.                case > 800:
  54.                    panel1.BackColor = Color.Red;
  55.                    panel2.BackColor = Color.Red;
  56.                    panel3.BackColor = Color.Red;
  57.                    panel4.BackColor = Color.Red;
  58.                    panel5.BackColor = Color.Red;
  59.                    panel6.BackColor = Color.Red;
  60.                    panel7.BackColor = Color.DarkRed;
  61.                    panel8.BackColor = Color.DarkRed;
  62.                    break;
  63.  
  64.                case > 700:
  65.                    panel1.BackColor = Color.Red;
  66.                    panel2.BackColor = Color.Red;
  67.                    panel3.BackColor = Color.Red;
  68.                    panel4.BackColor = Color.Red;
  69.                    panel5.BackColor = Color.Red;
  70.                    panel6.BackColor = Color.DarkRed;
  71.                    panel7.BackColor = Color.DarkRed;
  72.                    panel8.BackColor = Color.DarkRed;
  73.                    break;
  74.  
  75.                case > 600:
  76.                    panel1.BackColor = Color.Red;
  77.                    panel2.BackColor = Color.Red;
  78.                    panel3.BackColor = Color.Red;
  79.                    panel4.BackColor = Color.Red;
  80.                    panel5.BackColor = Color.DarkRed;
  81.                    panel6.BackColor = Color.DarkRed;
  82.                    panel7.BackColor = Color.DarkRed;
  83.                    panel8.BackColor = Color.DarkRed;
  84.                    break;
  85.  
  86.                case > 500:
  87.                    panel1.BackColor = Color.Red;
  88.                    panel2.BackColor = Color.Red;
  89.                    panel3.BackColor = Color.Red;
  90.                    panel4.BackColor = Color.DarkRed;
  91.                    panel5.BackColor = Color.DarkRed;
  92.                    panel6.BackColor = Color.DarkRed;
  93.                    panel7.BackColor = Color.DarkRed;
  94.                    panel8.BackColor = Color.DarkRed;
  95.                    break;
  96.  
  97.                case > 400:
  98.                    panel1.BackColor = Color.Red;
  99.                    panel2.BackColor = Color.Red;
  100.                    panel3.BackColor = Color.DarkRed;
  101.                    panel4.BackColor = Color.DarkRed;
  102.                    panel5.BackColor = Color.DarkRed;
  103.                    panel6.BackColor = Color.DarkRed;
  104.                    panel7.BackColor = Color.DarkRed;
  105.                    panel8.BackColor = Color.DarkRed;
  106.                    break;
  107.  
  108.                case > 300:
  109.                    panel1.BackColor = Color.Red;
  110.                    panel2.BackColor = Color.DarkRed;
  111.                    panel3.BackColor = Color.DarkRed;
  112.                    panel4.BackColor = Color.DarkRed;
  113.                    panel5.BackColor = Color.DarkRed;
  114.                    panel6.BackColor = Color.DarkRed;
  115.                    panel7.BackColor = Color.DarkRed;
  116.                    panel8.BackColor = Color.DarkRed;
  117.                    break;
  118.  
  119.                case > 200:
  120.                case > 0:
  121.                    panel1.BackColor = Color.DarkRed;
  122.                    panel2.BackColor = Color.DarkRed;
  123.                    panel3.BackColor = Color.DarkRed;
  124.                    panel4.BackColor = Color.DarkRed;
  125.                    panel5.BackColor = Color.DarkRed;
  126.                    panel6.BackColor = Color.DarkRed;
  127.                    panel7.BackColor = Color.DarkRed;
  128.                    panel8.BackColor = Color.DarkRed;
  129.                    break;
  130.  
  131.                default:
  132.                    this.Text = "Fuera de rango.";
  133.                    break;
  134.            }
  135.            #endregion

Con el código de ustedes me queda así.

Código
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4.  
  5. namespace _74xx595_Vumetro_01_Net5._0
  6. {
  7.    public partial class Form1 : Form
  8.    {
  9.        int valorADC = 0;
  10.        readonly Panel[] roPANELES;
  11.        readonly Color[] roCOLORES;
  12.  
  13.        public Form1()
  14.        {
  15.            InitializeComponent();
  16.            roPANELES = new Panel[] { panel1, panel2, panel3, panel4, panel5, panel6, panel7, panel8 };
  17.            roCOLORES = new Color[] { Color.DarkRed, Color.Red };
  18.            pinta("00000000");
  19.        }
  20.  
  21.        private void trackBar1_Scroll(object sender, EventArgs e)
  22.        {
  23.            valorADC = this.trackBar1.Value;
  24.            this.Text = valorADC.ToString();
  25.  
  26.            switch (valorADC)
  27.            {
  28.                case >= 1000:
  29.                    pinta("11111111");
  30.                    break;
  31.                case > 900:
  32.                    pinta("11111110");
  33.                    break;
  34.                case > 800:
  35.                    pinta("11111100");
  36.                    break;
  37.                case > 700:
  38.                    pinta("11111000");
  39.                    break;
  40.                case > 600:
  41.                    pinta("11110000");
  42.                    break;
  43.                case > 500:
  44.                    pinta("11100000");
  45.                    break;
  46.                case > 400:
  47.                    pinta("11000000");
  48.                    break;
  49.                case > 300:
  50.                    pinta("10000000");
  51.                    break;
  52.                case > 200:
  53.                    pinta("00000000");
  54.                    break;
  55.            }
  56.  
  57.  
  58.        }
  59.  
  60.        void pinta(string guia)
  61.        {
  62.            for (int i = 0; i < roPANELES.Length; i++)
  63.            {
  64.                roPANELES[i].BackColor = roCOLORES[int.Parse(guia.Substring(i, 1))];
  65.            }            
  66.        }
  67.    }
  68. }

En este código tengo una duda.
Código
  1. roPANELES[i].BackColor = roCOLORES[int.Parse(guia.Substring(i, 1))];

El 1 al final. ¿Qué significa exactamente?

Muchísimas gracias a los dos por los aportes he ideas. ;-) ;-) ;-) ;-) ;-) ;-) ;-)
« Última modificación: 14 Marzo 2021, 09:39 am por Meta » En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.164



Ver Perfil
Re: No me funciona este código que debería
« Respuesta #4 en: 14 Marzo 2021, 15:32 pm »

Significa que tome solo un caracter porque substring sino tomaría todos a partir del índice dado.

Que raro a mi no me funciona poner >= en los Case :o, quiza porque porque estoy usando Visual Studio 2010 :xD
En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: No me funciona este código que debería
« Respuesta #5 en: 15 Marzo 2021, 00:00 am »

Gracias por la información.

Lo de los caracteres >=, no he probado con la versión .Net FrameWork 4.7, estoy probando el .Net 5.0, que por supuesto, aún está muy verde y hay cuelgues y todo en todo el IDE a veces. Tienen que seguir sacando actualizaciones.

Con .Net 5.0 se puede usar en los case el <=.

Con .Net 4.7 no me deja.

Me salió un mensaje que con C# 7.3 no se puede, a patir del C# 9.0 o posterior. Ya lo tengo claro.

Saludos.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Por qué no me funciona este codigo?
Desarrollo Web
luison 0 2,470 Último mensaje 24 Septiembre 2010, 21:57 pm
por luison
Me explican si este código funciona [Bat]
Scripting
WIитX 2 3,672 Último mensaje 27 Agosto 2012, 07:03 am
por Eleкtro
No funciona este simple codigo
Programación Visual Basic
luis456 6 5,433 Último mensaje 21 Septiembre 2013, 08:50 am
por luis456
No tiene errores el codigo, pero no funciona como deberia ser
Programación C/C++
Ditarex 3 2,566 Último mensaje 7 Mayo 2014, 12:56 pm
por eferion
No me funciona este código
Programación C/C++
Meta 6 3,730 Último mensaje 1 Agosto 2017, 09:44 am
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines