如何通过 属性 设置按钮的启用状态

How to set enabled state of button via property

我有一个充满按钮的用户控件,我想做的是依次告诉每个按钮是否禁用,所以我使用了 public enumProperty 来允许我 dertmin按钮。

public enum iandENUM
    {
        Personal =0,
        Property = 1,
        iande = 2,
        Vechiles = 3
    }

public iandENUM actvieButton { get; set; }



<telerik:RadButton ID="rbPersonalDetails" runat="server" CssClass="btn btn-info" Text="Property Details">

                <ContentTemplate>
                    <i class="fa fa-user" style="color: #5bc0de;"></i>Personal Details
                </ContentTemplate>

            </telerik:RadButton>
            <telerik:RadButton ID="rbPropertyDetails" runat="server" CssClass="btn btn-info" Text="Property Details" DisabledButtonCssClass="btn btn-default">

                <ContentTemplate>
                    <i class="fa fa-home" style="color: #5bc0de;"></i>Property Details
                </ContentTemplate>

            </telerik:RadButton>
            <telerik:RadButton ID="rbVechicleDetails" runat="server" CssClass="btn btn-info"   DisabledButtonCssClass="btn btn-default" btn-defaultText="Vechicle Details">

                <ContentTemplate>
                    <i class="fa fa-car" style="color: #5bc0de;"></i>Vechicle Details
                </ContentTemplate>

            </telerik:RadButton>

            <telerik:RadButton ID="rbincomee"  runat="server" CssClass="btn btn-info" DisabledButtonCssClass="btn btn-default">

                <ContentTemplate>
                    <i class="fa fa-gbp" style="color: #5bc0de;"></i>Income & Expenditures 
                </ContentTemplate>

            </telerik:RadButton>



            <telerik:RadButton ID="rbPensions" runat="server" CssClass="btn btn-info"  DisabledButtonCssClass="btn btn-default">

                <ContentTemplate>
                    <i class="fa fa-bank" style="color: #5bc0de;"></i>Pensions
                </ContentTemplate>

            </telerik:RadButton>

            <telerik:RadButton ID="rbMeetings" runat="server" CssClass="btn btn-info"  DisabledButtonCssClass="btn btn-default">

                <ContentTemplate>
                    <i class="fa fa-calendar" style="color: #5bc0de;"></i>Meetings
                </ContentTemplate>

            </telerik:RadButton>

            <telerik:RadButton ID="rbOtherAssets" runat="server" CssClass="btn btn-info" DisabledButtonCssClass="btn btn-default">

                <ContentTemplate>
                    <i class="fa fa-share" style="color: #5bc0de;"></i>Other Assets
                </ContentTemplate>

            </telerik:RadButton>

这是 class 代码,我的主要问题是如何给出 属性 值,以便我可以根据 iandeEnum

设置活动按钮
  protected void Page_Load(object sender, EventArgs e)
    {
        if(actvieButton==casesToolbar.iandENUM.Personal)
        {




        }
    }

    private bool _enabledState;
    public bool EnabledState
    {
        get { return _enabledState; }
        set {

            rbMeetings.Enabled = _enabledState;
            rbOtherAssets.Enabled = _enabledState;
            rbPensions.Enabled = _enabledState;
            rbPropertyDetails.Enabled = _enabledState;
            rbVechicleDetails.Enabled = _enabledState;
            rbincomee.Enabled = _enabledState;
             }
    }

    public enum iandENUM
    {
        Personal =0,
        Property = 1,
        iande = 2,
        Vechiles = 3
    }

    public iandENUM actvieButton { get; set; }
    public void disableSectionsTillSave(Boolean isEnabled)
    {

        try
        {
            rbMeetings.Enabled = isEnabled;
            rbOtherAssets.Enabled = isEnabled;
            rbPensions.Enabled = isEnabled;
            rbPropertyDetails.Enabled = isEnabled;
            rbVechicleDetails.Enabled = isEnabled;
            rbincomee.Enabled = isEnabled;
        }
        catch (Exception ex)

        {
            string inner = string.Empty;
            if (ex.InnerException != null)
            {
                inner = ex.InnerException.ToString();
            }
            logger.Error("Error in disableSectionsTillSave function edit modules cases " + ex.ToString() + " " + inner);

        }


    }

也许只有我一个人,但我看到了对 属性 用法的误解。这里的错误是您没有在 setter 中设置 属性 值。如果您需要访问 属性 的字段,您可以这样写 属性:

private bool _enabledState;
public bool EnabledState
{
    get { return _enabledState; }
    set { _enabledState = value; }
}

但是,现在这种声明和使用 属性 的方式已经过时。更好的方法是通过所谓的 auto-属性:

public bool EnabledState { get; set; }

在此 MSDN article

中阅读有关属性的更多信息

稍后您可以通过访问 属性 本身来访问 属性 值 - 即 EnabledState - 而不是 属性 支持字段 - 即 _enabledProperty 在这种情况下。

您通过将 EnabledState 分配给它们的 Enabled 属性:

来设置按钮的启用状态,在代码的其他地方
        rbMeetings.Enabled = EnabledState;
        rbOtherAssets.Enabled = EnabledState;
        rbPensions.Enabled = EnabledState;
        rbPropertyDetails.Enabled = EnabledState;
        rbVechicleDetails.Enabled = EnabledState;
        rbincomee.Enabled = EnabledState;

遗憾的是,如果没有关于业务逻辑的更多详细信息,我无法就何时以及如何确定 EnabledState 向您提供建议。显然它应该在您设置按钮之前发生。一种方法是 运行 在 Page_Load 中确定 EnabledState 的逻辑,然后在 Page_PreRender 中设置按钮。

ActiveButton 属性 的值被修改时,您可以启用适当的按钮:

public enum MyEnum
{
    Val1,
    Val2,
    Val3
}

private MyEnum m_ActiveButton = MyEnum.Val1;

public MyEnum ActiveButton
{
    get
    {
        return m_ActiveButton;
    }

    set
    {
        m_ActiveButton= value;

        btn1.Enabled = false;
        btn2.Enabled = false;
        btn3.Enabled = false;

        switch (value)
        {
            case MyEnum.Val1:
            {
                btn1.Enabled = true;
                break;
            }

            case MyEnum.Val2:
            {
                btn2.Enabled = true;
                break;
            }

            case MyEnum.Val3:
            {
                btn3.Enabled = true;
                break;
            }
        }
    }
}

也可以在标记中使用属性,设置初始状态:

<userCtl:WebCtl1 runat="server" ActiveButton="Val3" />