正确启用/禁用“保存”按钮

时间:2012-07-27 13:39:49

标签: c#

假设我们有一个带有“保存”工具栏按钮的Win32表单,并且表格上有一些类似CheckBox的控件,现在我们为复选框的onchange事件编写一行代码以启用/禁用“保存”按钮。假设首先选中复选框,禁用保存按钮,现在取消选中复选框,保存按钮变为启用...现在再次选中复选框保存按钮仍然启用...例如,TextBox相同。假设它的文字是“Hi”...将其改为“Hi Bye”,保存已启用...将其更改为“Hi”原样,Save保持启用状态... 是否有我们可以使用的模型来防止这些错误的启用/禁用保存按钮?

3 个答案:

答案 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()上的当前文本进行比较,以确定是否与原始变量进行了比较(即自上次保存以来)。