假设我们有一个带有“保存”工具栏按钮的Win32表单,并且表格上有一些类似CheckBox的控件,现在我们为复选框的onchange事件编写一行代码以启用/禁用“保存”按钮。假设首先选中复选框,禁用保存按钮,现在取消选中复选框,保存按钮变为启用...现在再次选中复选框保存按钮仍然启用...例如,TextBox相同。假设它的文字是“Hi”...将其改为“Hi Bye”,保存已启用...将其更改为“Hi”原样,Save保持启用状态... 是否有我们可以使用的模型来防止这些错误的启用/禁用保存按钮?
答案 0 :(得分:2)
您需要在复选框的IF - ELSE
事件中编写一些CheckedChanged
代码。通过检查控件的Checked
属性(复选框)来检查当前状态是什么,如果是,则将Button的Enabled proeprty设置为true,否则为false。
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
if (checkBox2.Checked)
button1.Enabled = true;
else
button1.Enabled = false;
}
假设checkBox2
是复选框的名称,button1
是保存按钮的名称。
您也可以将相同的IF ELSE逻辑用于其他控件。要设置文本框的值,请使用Text属性
TextBox1.Text="I am gonna try something now"l
编辑:建议comecme,如果您只想根据checbox启用/禁用按钮,可以在一行中完成,而不是像这样的IF else块< / p>
button1.Enabled=checkBox2.Checked
答案 1 :(得分:1)
您可以存储上次保存的状态,并在其更改时将当前状态与其进行比较,以查看它们是否相同。如果是这样,请禁用该按钮。
如果这些比较很昂贵,你可以通过计算需要保存的所有字段的哈希值来提高效率,并且如果上次保存的状态的哈希值与哈希值相匹配,则只进行正确的比较。现状。
答案 2 :(得分:0)
我没有得到你的复选框,但我会使用一个布尔变量:
private Boolean _canSave = false;
private Boolean CanSave
{
get { return _canSave; }
set
{
_canSave = value;
MenuSave.Enabled = value;
}
}
public void MenuSave_Click()
{
Save();
}
private void Save()
{
// do your thing
CanSave = false;
}
public void TextBox_TextChanged()
{
CanSave = true;
}
当您将文本还原为原始文本时,这不会考虑禁用保存菜单。如果您需要,则必须将Save()
方法中的文本存储在私有变量中,并将其与每个TextBox_TextChanged()
上的当前文本进行比较,以确定是否与原始变量进行了比较(即自上次保存以来)。