代码:
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;
还有其他任何可以做到这一点并使我的应用程序更加动态吗? 我问这个的原因是因为可能存在多个控件在一个表单上的情况,我认为它会变得混乱。
答案 0 :(得分:2)
与代码示例相比,我通常喜欢做两件事:
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
即可。这样,不同的控件不会以相同的方式彼此依赖,而是依赖于它们相关的状态。
答案 1 :(得分:0)
setBox2.Enabled = Properties.Settings.Default.userproxy;