visual tabulacion orden ejemplos c# .net winforms radio-button

c# - ejemplos - orden de tabulacion visual basic



¿Cómo agrupo los botones de radio de Windows Form? (9)

¿Cómo puedo agrupar los botones de radio en la aplicación Windows Form (muy parecido a la lista de botones de radio de ASP.NET)?

Así que puedo cambiar entre cada caso elegido de las opciones.


Botón de radio sin panel

public class RadioButton2 : RadioButton { public string GroupName { get; set; } } private void RadioButton2_Clicked(object sender, EventArgs e) { RadioButton2 rb = (sender as RadioButton2); if (!rb.Checked) { foreach (var c in Controls) { if (c is RadioButton2 && (c as RadioButton2).GroupName == rb.GroupName) { (c as RadioButton2).Checked = false; } } rb.Checked = true; } } private void Form1_Load(object sender, EventArgs e) { //a group RadioButton2 rb1 = new RadioButton2(); rb1.Text = "radio1"; rb1.AutoSize = true; rb1.AutoCheck = false; rb1.Top = 50; rb1.Left = 50; rb1.GroupName = "a"; rb1.Click += RadioButton2_Clicked; Controls.Add(rb1); RadioButton2 rb2 = new RadioButton2(); rb2.Text = "radio2"; rb2.AutoSize = true; rb2.AutoCheck = false; rb2.Top = 50; rb2.Left = 100; rb2.GroupName = "a"; rb2.Click += RadioButton2_Clicked; Controls.Add(rb2); //b group RadioButton2 rb3 = new RadioButton2(); rb3.Text = "radio3"; rb3.AutoSize = true; rb3.AutoCheck = false; rb3.Top = 80; rb3.Left = 50; rb3.GroupName = "b"; rb3.Click += RadioButton2_Clicked; Controls.Add(rb3); RadioButton2 rb4 = new RadioButton2(); rb4.Text = "radio4"; rb4.AutoSize = true; rb4.AutoCheck = false; rb4.Top = 80; rb4.Left = 100; rb4.GroupName = "b"; rb4.Click += RadioButton2_Clicked; Controls.Add(rb4); }


Debe colocar todos los botones de opción del grupo dentro del mismo contenedor, como un GroupBox o Panel.


Me gusta el concepto de agrupar RadioButtons en WPF. Existe una propiedad GroupName que especifica qué controles de RadioButton se excluyen mutuamente ( http://msdn.microsoft.com/de-de/library/system.windows.controls.radiobutton.aspx ).

Así que escribí una clase derivada para WinForms que soporta esta característica:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Windows.Forms.VisualStyles; using System.Drawing; using System.ComponentModel; namespace Use.your.own { public class AdvancedRadioButton : CheckBox { public enum Level { Parent, Form }; [Category("AdvancedRadioButton"), Description("Gets or sets the level that specifies which RadioButton controls are affected."), DefaultValue(Level.Parent)] public Level GroupNameLevel { get; set; } [Category("AdvancedRadioButton"), Description("Gets or sets the name that specifies which RadioButton controls are mutually exclusive.")] public string GroupName { get; set; } protected override void OnCheckedChanged(EventArgs e) { base.OnCheckedChanged(e); if (Checked) { var arbControls = (dynamic)null; switch (GroupNameLevel) { case Level.Parent: if (this.Parent != null) arbControls = GetAll(this.Parent, typeof(AdvancedRadioButton)); break; case Level.Form: Form form = this.FindForm(); if (form != null) arbControls = GetAll(this.FindForm(), typeof(AdvancedRadioButton)); break; } if (arbControls != null) foreach (Control control in arbControls) if (control != this && (control as AdvancedRadioButton).GroupName == this.GroupName) (control as AdvancedRadioButton).Checked = false; } } protected override void OnClick(EventArgs e) { if (!Checked) base.OnClick(e); } protected override void OnPaint(PaintEventArgs pevent) { CheckBoxRenderer.DrawParentBackground(pevent.Graphics, pevent.ClipRectangle, this); RadioButtonState radioButtonState; if (Checked) { radioButtonState = RadioButtonState.CheckedNormal; if (Focused) radioButtonState = RadioButtonState.CheckedHot; if (!Enabled) radioButtonState = RadioButtonState.CheckedDisabled; } else { radioButtonState = RadioButtonState.UncheckedNormal; if (Focused) radioButtonState = RadioButtonState.UncheckedHot; if (!Enabled) radioButtonState = RadioButtonState.UncheckedDisabled; } Size glyphSize = RadioButtonRenderer.GetGlyphSize(pevent.Graphics, radioButtonState); Rectangle rect = pevent.ClipRectangle; rect.Width -= glyphSize.Width; rect.Location = new Point(rect.Left + glyphSize.Width, rect.Top); RadioButtonRenderer.DrawRadioButton(pevent.Graphics, new System.Drawing.Point(0, rect.Height / 2 - glyphSize.Height / 2), rect, this.Text, this.Font, this.Focused, radioButtonState); } private IEnumerable<Control> GetAll(Control control, Type type) { var controls = control.Controls.Cast<Control>(); return controls.SelectMany(ctrl => GetAll(ctrl, type)) .Concat(controls) .Where(c => c.GetType() == type); } } }


Mira a colocar tus botones de radio en un GroupBox .


Si no puede colocarlos en un contenedor, debe escribir el código para cambiar el estado marcado de cada RadioButton :

private void rbDataSourceFile_CheckedChanged(object sender, EventArgs e) { rbDataSourceNet.Checked = !rbDataSourceFile.Checked; } private void rbDataSourceNet_CheckedChanged(object sender, EventArgs e) { rbDataSourceFile.Checked = !rbDataSourceNet.Checked; }


Todos los botones de opción dentro de un contenedor compartido están en el mismo grupo de forma predeterminada . Significa, si marca uno de ellos, los demás estarán desactivados. Si desea crear grupos de botones de radio independientes, debe ubicarlos en diferentes contenedores, como Group Box , o controlar su estado Verificado mediante el código que se encuentra detrás .


GroupBox es mejor. Pero no solo cuadro de grupo, incluso puede usar Panels ( System.Windows.Forms.Panel ).

  • Eso es muy útil cuando está diseñando el diálogo de configuración de la versión 4 del Protocolo de Internet. (Verifíquelo con su PC (Windows), entonces puede comprender el comportamiento)

Coloque los botones de radio dentro de GroupBox (u otro panel)


Coloque todos los botones de opción para un grupo en un objeto contenedor como un Panel o un Panel . Eso los agrupará automáticamente en Windows Forms.