我有一个带有两个RadioButton
的简单表单。我希望在应用程序开始时取消选中RadioButton
个(默认情况下不选择任何选项),这样用户就必须自己做出选择。
虽然我在Checked
构造函数和false
RadioButton
事件中的所有Form
上将Form
属性设置为Load
处理程序,我还在构造函数中调用了一个方法,该方法将所有Checked
的所有RadioButton
属性设置为false
,当我运行应用程序时,第一个RadioButton
仍在检查中。
以下是代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace OptionSelection
{
public partial class Form1 : Form
{
InitializeComponent();
radioButton1.Checked = false;
radioButton2.Checked = false;
this.Load += new System.EventHandler(this.Form1_Load);
this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
UncheckAllRadioButtons();
}
private void UncheckAllRadioButtons()
{
IEnumerable<Control> allControls = GetAllControlsOfDeterminedType(this, typeof(RadioButton));
foreach (Control currentControl in allControls)
{
RadioButton _currentRadioButton = (RadioButton)currentControl;
if (_currentRadioButton.Checked)
{
_currentRadioButton.Checked = false;
}
}
}
public IEnumerable<Control> GetAllControlsOfDeterminedType(Control currentControl, Type type)
{
IEnumerable<System.Windows.Forms.Control> allControls = currentControl.Controls.Cast<Control>();
return allControls.SelectMany(selectedControls => GetAllControlsOfDeterminedType(selectedControls, type)).Concat(allControls).Where(candidateControl => candidateControl.GetType() == type);
}
private void radioButton_CheckedChanged(object sender, EventArgs e)
{
if (sender == (RadioButton)radioButton1)
{
MessageBox.Show("radioButton1");
}
else
{
MessageBox.Show("radioButton2");
}
}
private void Form1_Load(object sender, EventArgs e)
{
radioButton1.Checked = false;
radioButton2.Checked = false;
}
}
答案 0 :(得分:1)
您不需要所有代码。只需将单选按钮的AutoCheck
属性设置为false
。
如果要在代码中将Checked
属性设置为false
,则必须在显示表单后执行此操作。因此,请将代码从Load
事件移至Shown
事件:
private void Form1_Shown(object sender, EventArgs e) {
radioButton1.Checked = false;
//radioButton2.Checked = false;
}
您只需要第一行,但它是您的代码。
顺便说一下,默认情况下,在表单加载时不会检查单选按钮。您面临的问题是因为您的单选按钮是表单上的第一个控件(或可能是唯一的控件)。因此,当显示表单时,焦点将移动到第一个控件,并自动检查单选按钮。你可以通过简单地更改单选按钮的TabIndex
来阻止它,这样它们就不是第一个控件(你必须在表单上有其他控件),或者通过设置单选按钮的TabStop
属性来false
,所以他们没有专心。