0 votes

Quelle est la meilleure pratique pour gérer le contrôle CheckBox dans WinForm?

Le formulaire de gain :
texte alternatif

Le code :

using System;
using System.Windows.Forms;

namespace DemoApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            groupBox2.Enabled = checkBox1.Checked;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SaveSetings();
        }

        private void SaveSetings()
        {
            Properties.Settings.Default.UserName = textBox1.Text;
            Properties.Settings.Default.pass = textBox2.Text;
            Properties.Settings.Default.userproxy = checkBox1.Checked;
            Properties.Settings.Default.proxy = textBox3.Text;
            Properties.Settings.Default.proxy_port = textBox4.Text;
            Properties.Settings.Default.Save();
        }

        //private void Form1_Load(object sender, EventArgs e)
        //{
        //    checkBox1.Refresh();
        //    groupBox2.Enabled = checkBox1.Checked;
        //}
    }
}

Comme vous pouvez le voir dans le code, j'ai une case à cocher "Utiliser le proxy" qui, lorsqu'elle est sélectionnée, devrait activer le groupbox1 ou vice versa. Le problème est que lorsque le formulaire charge les paramètres à partir de "user.config", même si la case de contrôle n'est pas sélectionnée, le groupbox 1 est activé. Une façon de gérer cette situation est de vérifier la case de contrôle dans l'événement de chargement du formulaire, c'est-à-dire

groupBox2.Enabled = checkBox1.Checked;

y a-t-il d'autres moyens de faire cela et de rendre mon application plus dynamique ? La raison pour laquelle je pose cette question est qu'il peut y avoir des situations où plusieurs contrôles sont sur un seul formulaire, et je pense que cela deviendra confus.

2voto

Fredrik Mörk Points 85694

Je aime généralement faire deux choses différemment par rapport à votre exemple de code :

  • Au lieu de créer une dépendance couplée entre les contrôles, créez une valeur décrivant l'état à la place
  • Regroupez le code qui modifie l'état de l'interface utilisateur des contrôles (comme Visible et Enabled) dans une seule méthode, et appelez-la chaque fois que nécessaire.

Exemple:

private bool _useProxy;
private bool UseProxy
{
    get
    {
        return _useProxy;
    }
    set
    {
        bool valueChanged = _useProxy != value;
        _useProxy = value;
        if (valueChanged)
        {
            SetControlStates();
        }
    }
}

private void SetControlStates()
{
    groupBox2.Enabled = this.UseProxy;
    checkBox1.Checked = this.UseProxy;
}

private void checkBox1_CheckedChanged(object sender, EventArgs 
    this.UseProxy = checkBox1.Checked;
}

Ensuite, dans Form_Load, lors de la lecture depuis le fichier de configuration, vous assignez simplement this.UseProxy avec la valeur du fichier. De cette façon, les différents contrôles ne dépendent pas les uns des autres de la même manière, mais plutôt de l'état auquel ils sont liés.

0voto

Trickster Points 2286

Dans le gestionnaire Form.Loaded, définissez groupBox2.Enabled = Properties.Settings.Default.userproxy;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X