簡體   English   中英

將屬性添加到控件類

[英]Add attributes to a control class

我想知道是否可以在c#中向Control添加屬性。

我有一個方法在參數中接收對象:

    public void CreateTooltip(Object controltoadd = null)
    {
        var myDiv = new HtmlGenericControl("div");
        myDiv.Attributes.Add("width", "100%");

        myDiv.Attributes.Add("onmouseover", "ShowHint('" + this.GetType() + "','test');");
        myDiv.Attributes.Add("onmouseout", "HideHint();");

        if (controltoadd == null)
        {
            List<Control> listcc = new List<Control>();

            for (int i = 0; i < this.Controls.Count; i++)
            {
                Control cc = this.Controls[i];
                string test = cc.GetType().ToString();
                listcc.Add(cc);
            }

            this.Controls.Clear();

            for (int i = 0; i < listcc.Count; i++)
            {
                Control cc = listcc[i];
                myDiv.Controls.Add(cc);
            }
        }
        else
        {
            Control cc = (Control)controltoadd;

            //Don't know what to do here...
        }

        this.Controls.Add(myDiv);
    }

如果對象為null,則創建一個HtmlGenericControl("div") ,然后添加所需的Attributes 但是問題是當Object不為null時,我將其轉換為Control ,並且屬性Attributes不可用。 我使用控件是因為我永遠不知道參數中接收到的對象是哪種類型。

我相信您需要將其轉換為WebControlHtmlGenericControl Control不包含屬性Attributes 您可以使用來測試傳遞的對象is

if (control is WebControl)
{
    var webControl = (WebControl)control;
}

或者,如果您更喜歡as

var webControl = control as WebControl;

if (webcontrol != null)
{
    // code
}

因此,如果它實際上是WebControlControl子類),則可以將其強制轉換為它並使用它的Attributes屬性 您已經注意到, Control本身沒有屬性Attributes

WebControl wc = controltoadd as WebControl;
if(wc != null)
{
    // wc.Attributes.Add...
}

如果是HtmlControl則將其HtmlControl轉換為:

else
{
    HtmlControl hc = controltoadd as HtmlControl;
    if(hc != null)
    {
        // hc.Attributes.Add...
    }
}

另一種選擇是使它成為僅接受實現IAttributeAccessor控件的通用方法。 HtmlControlWebControl實現該接口以獲取/設置屬性。

public void CreateTooltip<T>(T controlToAdd)where T: IAttributeAccessor, Control
{
    // ....
    controlToAdd.SetAttribute("width", "100%");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM