Как лучше всего обрабатывать CheckBox Control в WinForm? - PullRequest
0 голосов
/ 25 октября 2009

Форма волны:
alt text

Код:

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;
        //}
    }
}

Как вы можете видеть в коде, у меня есть флажок «Использовать прокси», который при выборе должен включать groupbox1 или наоборот. Проблема в том, что когда форма загружает настройки из «user.config», даже если элемент управления чек не выбран, включается группа 1. Один из способов справиться с этой ситуацией - проверить наличие элемента управления в событии загрузки формы, т.е.

groupBox2.Enabled = checkBox1.Checked;

есть ли еще кто-нибудь, чтобы сделать это и сделать мое приложение более динамичным? Причина, по которой я спрашиваю об этом, заключается в том, что могут быть ситуации, когда несколько элементов управления находятся в одной форме, и я думаю, что это может сбить с толку.

Ответы [ 2 ]

2 голосов
/ 25 октября 2009

Мне обычно нравится делать две вещи по-другому по сравнению с вашим примером кода:

  • Вместо создания связанной зависимости между элементами управления вместо этого создайте значение, описывающее состояние
  • Соберите код, который изменяет состояние элементов управления пользовательского интерфейса (например, Visible и Enabled), в один метод и вызывайте его при необходимости.

Пример:

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;
}

Затем в Form_Load при чтении из файла конфигурации вы просто присваиваете this.UseProxy значение из файла. Таким образом, различные элементы управления не зависят друг от друга одинаково, а скорее от состояния, с которым они связаны.

0 голосов
/ 25 октября 2009

в наборе обработчиков Form.Loaded groupBox2.Enabled = Properties.Settings.Default.userproxy;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...