0

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

我有一个方法,它在参数中接收一个对象:

    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);
    }

如果对象为空,我创建一个HtmlGenericControl("div")然后添加Attributes我想要的。但问题是当 Object 不为 null 时,我将其转换为Control,并且该属性Attributes不可用。我使用控制是因为我永远不知道我在参数中收到的对象的类型。

4

2 回答 2

2

您需要将其转换为 aWebControl或 aHtmlGenericControl我相信。Control不包含属性Attributes。您可以通过使用来测试您传递的对象是什么is

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

或者,如果您更喜欢使用as

var webControl = control as WebControl;

if (webcontrol != null)
{
    // code
}
于 2013-09-04T15:26:20.680 回答
1

因此,如果它实际上是一个WebControl(子类Control),那么您可以将其转换为它并使用它的Attributesproperty。正如您已经注意到的那样,Control它本身没有属性:Attributes

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

如果它是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%");
}
于 2013-09-04T15:25:57.183 回答