Comment puis-je empêcher un RadioButton d'être vérifié lorsque le formulaire se charge?

Je n'arrive pas à empêcher mon formulaire de vérification de l'un des Boutons Radio mon Group Box:

entrez la description de l'image ici

Comme indiqué dans le concepteur, aucun bouton Radio n'y est coché.

Ci-dessous est à peu près tout le code pour ce formulaire simple. Rien n'exige que les boutons Radio soient cochés ici ou dans le concepteur du formulaire.

Q: Est-il un moyen de prévenir les Bouton Radio d'être vérifié lorsque le formulaire les charges?

public ValueTypeSelector() {
  InitializeComponent();
  radioButton1.Checked = false;
  radioButton2.Checked = false;
  radioButton3.Checked = false;
  radioButton4.Checked = false;
  radioButton5.Checked = false;
  radioButton6.Checked = false;
  button1.Enabled = false;
  button1.Click += clickEvent;
  button2.Click += clickEvent;
  radioButton1.Click += clickEvent;
  radioButton2.Click += clickEvent;
  radioButton3.Click += clickEvent;
  radioButton4.Click += clickEvent;
  radioButton5.Click += clickEvent;
  radioButton6.Click += clickEvent;
}

void OnShow(object sender, EventArgs e) {
  foreach (RadioButton rad in Controls) {
    if (rad.Checked) {
      Console.WriteLine("WTF?");
    }
  }
}

void clickEvent(object sender, EventArgs e) {
  RadioButton rad = sender as RadioButton;
  if (rad != null) {
    if (rad.Checked) {
      if (rad == radioButton1) {
        DataType = TableDataType.Boolean; // <= HERE IS THE PROBLEM! FIRES ON FORM LOAD
      } else if (rad == radioButton2) {
        DataType = TableDataType.Character;
      } else if (rad == radioButton3) {
        DataType = TableDataType.DateTime;
      } else if (rad == radioButton4) {
        DataType = TableDataType.Decimal;
      } else if (rad == radioButton5) {
        DataType = TableDataType.Integer;
      } else if (rad == radioButton6) {
        DataType = TableDataType.String;
      } else {
        return;
      }
      button1.Enabled = true;
    }
  } else if (sender == button1) {
    DialogResult = DialogResult.OK;
    Close();
  } else if (sender == button2) {
    DialogResult = DialogResult.Cancel;
    Close();
  }
}

Mise à JOUR: Le problème est que radioButton1 obtient vérifié lorsque le formulaire est affiché:

      if (rad == radioButton1) {
        DataType = TableDataType.Boolean; // <= HERE IS THE PROBLEM! FIRES ON FORM LOAD
      } else if (rad == radioButton2) {
21
demandé sur Stephen Kennedy 2011-07-19 21:23:53

5 réponses

Assurez-vous que vos radiobuttons ne sont pas les premiers contrôles tabindex = 0. Faites le bouton OK tabindex = 0, suivi des radiobuttons.

26
répondu LarsTech 2011-07-19 17:39:36

Dans le mode conception, vous trouverez la propriété AutoCheck définie sur true. Il suffit de tourner pour de faux. Il ne sera pas vérifié jusqu'à ce que vous le sélectionniez manuellement pendant l'exécution.

14
répondu SaravananArumugam 2011-07-19 17:45:34

Définissez TabStop=False dans les propriétés.

2
répondu mofidul 2016-06-14 04:36:00

Définit l'état vérifié sur false après le chargement du formulaire. Mettez ceci dans L'événement montré et voyez si cela fonctionne.

1
répondu Pinakin Shah 2011-07-19 17:46:35

Je pense que cela pourrait être un bug dans VS. j'utilise 2010 SP1 mais OP ne mentionne pas quelle version ils utilisent.

Avait le même fantôme qui se passait dans l'une de mes applications.

Changé Autochecked pour les deux boutons radio à False, construit l'application. Les boutons affectés n'ont plus été sélectionnés, mais d'autres précédemment non affectés ont été sélectionnés.

Est retourné dans le code et a transformé autocheck à true sur les boutons d'origine, puis a basculé de true à false et retour à nouveau sur les boutons nouvellement affectés. Re a couru et l'application était bien; aucun bouton sélectionné.

Lorsque j'ai vérifié les tabIndexes pour les boutons radio d'origine, ils ont été définis sur tabIndex 0; que j'ai changé, de sorte que cela pourrait également faire partie du mélange.

1
répondu gorlaz 2015-05-14 02:45:29