2008-11-11 34 views
55

¿Es posible crear un botón de alternar en C# WinForms? Sé que puede usar un control CheckBox y establecer su propiedad Apariencia en "Botón", pero no se ve bien. Quiero que aparezca hundido, no plano, cuando se lo presiona. ¿Alguna idea?ToggleButton in C# WinForms

Respuesta

0

Terminé anulando los eventos OnPaint y OnBackgroundPaint y dibujo manualmente el botón exactamente como lo necesito. Funcionó bastante bien.

+13

¿Puedes compartir el código? – Volatil3

0

Siempre puede codificar su propio botón con gráficos personalizados y un PictureBox, aunque no necesariamente coincidirá con el tema de Windows de sus usuarios.

8

Compruebe la propiedad de FlatStyle. Al establecerlo en "Sistema", la casilla de verificación se hunde en mi entorno.

+1

Eso lo hace plano cuando la caja está desmarcada sin embargo. –

+0

Se sube cuando no se selecciona y se hunde cuando se marca en mi máquina (Vista hecha para parecerse a Win 2000 - tema Windows Classic). –

+0

¡Tienes razón! Accidentalmente lo tenía en Popup por el estilo. Mi error. –

2

También puede considerar el control ToolStripButton si no le importa alojarlo en un ToolStripContainer. Creo que puede soportar de forma nativa estados prensados ​​y no comprimidos.

120

sólo puede utilizar un CheckBox y establecer su apariencia a Button:

CheckBox checkBox = new System.Windows.Forms.CheckBox(); 
checkBox.Appearance = System.Windows.Forms.Appearance.Button; 
+0

nice and simple – fnc12

+0

El enlace está muerto ... – JRO

+0

Utilice [archive.org link] (http://web.archive.org/web/20140214234414/http://osix.net/modules/article/?id=797) – rabejens

4

tros es una manera simple de crear botón de activación. Lo pruebo en vs2010. Es perfecto.

ToolStripButton tiene una propiedad "Comprobada" y una propiedad "CheckOnClik". Se puede utilizar para actuar como un botón de activación

tbtnCross.CheckOnClick = true; 

O

tbtnCross.CheckOnClick = false; 
    tbtnCross.Click += new EventHandler(tbtnCross_Click); 
    ..... 

    void tbtnCross_Click(object sender, EventArgs e) 
    { 
     ToolStripButton target = sender as ToolStripButton; 
     target.Checked = !target.Checked; 
    } 

También, puede crear alternar lista de botones de la siguiente manera:

 private void Form1_Load(object sender, EventArgs e) 
    { 
     arrToolView[0] = tbtnCross; 
     arrToolView[1] = tbtnLongtitude; 
     arrToolView[2] = tbtnTerrain; 
     arrToolView[3] = tbtnResult; 
     for (int i = 0; i<arrToolView.Length; i++) 
     { 
      arrToolView[i].CheckOnClick = false; 
      arrToolView[i].Click += new EventHandler(tbtnView_Click); 
     } 
     InitTree(); 
    } 

    void tbtnView_Click(object sender, EventArgs e) 
    { 
     ToolStripButton target = sender as ToolStripButton; 
     if (target.Checked) return; 
     foreach (ToolStripButton btn in arrToolView) 
     { 
       btn.Checked = false; 
       //btn.CheckState = CheckState.Unchecked; 
     } 
     target.Checked = true; 
     target.CheckState = CheckState.Checked; 

    } 
+0

No es un control. ¿Cómo lo incrusta en la GUI? – Bitterblue

+0

Puedes usarlo en una tira de herramientas. – legendJSLC

-1

Cambiar un aspecto CheckBox al botón le da dificultad en los ajustes. No puede cambiar sus dimensiones porque su tamaño depende del tamaño de su texto o imagen.

Puede probar esto: (inicializar la variable de recuento primero en 1 | int cuenta = 1)

private void settingsBtn_Click(object sender, EventArgs e) 
    { 
     count++; 

     if (count % 2 == 0) 
     { 
      settingsPanel.Show(); 
     } 
     else 
     { 
      settingsPanel.Hide(); 
     } 
    } 

Es muy simple, pero funciona.

Advertencia: Esto funciona bien con los botones que se utilizan de vez en cuando (la configuración es decir), el valor de recuento en int/long puede estar sobrecargado cuando se utiliza más de lo que la capacidad sin cerrar proceso de la aplicación. (Compruebe el tipo de datos varía: http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx)

La Buena Nueva: Si está ejecutando una aplicación que no está destinado para uso 24/7 todo el año, creo que esto es útil. Lo importante es que cuando el proceso de la aplicación finaliza y lo ejecuta nuevamente, el recuento de se restablecerá a 1.

+2

¿Por qué no usar una bandera booleana? 'currentlyVisible =! currentlyVisible; if (currentlyVisible) {settingsPanel.Show(); } ... ' –

+0

O simplemente podría establecer' .AutoSize' en 'false' ... – Bob

5

¿Qué tal esto?

Suponiendo que tiene referencias a System.Windows.Forms.

var cbtnToggler = new CheckBox(); 
cbtnToggler.Appearance = Appearance.Button; 
cbtnToggler.TextAlign = ContentAlignment.MiddleCenter; 
cbtnToggler.MinimumSize = new Size(75, 25); //To prevent shrinkage! 

Esperanza esto ayuda;)

0

uso si el comando para verificar el estado y dejar que funcione como un botón de activación

private void Protection_ON_OFF_Button_Click(object sender, EventArgs e) 
     { 

      if (FolderAddButton.Enabled == true) 
      { 
       FolderAddButton.Enabled = false; 
      } 
      else 
      { 
       FolderAddButton.Enabled = true; 
      } 
     } 
0

Ésta es mis códigos simples espero que le puede ayudar a

private void button2_Click(object sender, EventArgs e) 
    { 
     if (button2.Text == "ON") 
     { 
      panel_light.BackColor = Color.Yellow; //symbolizes light turned on 

      button2.Text = "OFF"; 
     } 

     else if (button2.Text == "OFF") 
     { 
      panel_light.BackColor = Color.Black; //symbolizes light turned off 

      button2.Text = "ON"; 
     } 
    } 
+0

Esta no era una mala respuesta, la casilla de verificación segura puede aparecer como un botón, sin embargo las casillas de verificación tienen limitaciones (no se puede establecer un tamaño personalizado independiente de tamaño del texto), por lo que la votación ascendente. – user3800527

0

Bueno Jon Tackabury puede usar MetroUI Framework para usar togg botón le. Proporciona muchos otros controles que se ven diferentes UI al igual que Windows 8.

Puede intentarlo al menos una vez.

Cómo utilizar simplemente ver esto, https://www.youtube.com/watch?v=Ryxew9cgkZA

espero que esto sea útil.