C# 向控件类添加属性

C# 向控件类添加属性,c#,asp.net,C#,Asp.net,我想知道是否可以在c#中向控件添加属性 我有一个方法,它接收参数中的对象: public void CreateTooltip(Object controltoadd = null) { var myDiv = new HtmlGenericControl("div"); myDiv.Attributes.Add("width", "100%"); myDiv.Attributes.Add("onmouseover", "Show

我想知道是否可以在c#中向
控件添加属性

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

    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);
    }
public void CreateTooltip(对象控制添加=null)
{
var myDiv=新的HtmlGenericControl(“div”);
添加(“宽度”,“100%”);
Add(“onmouseover”、“ShowHint(“+this.GetType()+”,“test”);”;
Add(“onmouseout”、“HideHint();”;
如果(controltoadd==null)
{
List listcc=新列表();
for(int i=0;i

如果对象为null,我将创建一个
HtmlGenericControl(“div”)
,然后添加所需的
属性。但问题是当对象不为null时,我将其转换为
控件
,并且属性
属性
不可用。我使用控件是因为我不知道在参数中接收到的对象的类型。

因此,如果它实际上是一个
网络控件(
控件的子类)
,那么您可以将它强制转换为它并使用它的属性<代码>控件
本身没有属性
属性
,正如您已经注意到的:

WebControl wc = controltoadd as WebControl;
if(wc != null)
{
    // wc.Attributes.Add...
}
如果是
HtmlControl
将其转换为:

else
{
    HtmlControl hc = controltoadd as HtmlControl;
    if(hc != null)
    {
        // hc.Attributes.Add...
    }
}
另一种选择是使其成为仅接受实现的控件的通用方法。
HtmlControl
WebControl
都实现了该接口以获取/设置属性:

public void CreateTooltip<T>(T controlToAdd)where T: IAttributeAccessor, Control
{
    // ....
    controlToAdd.SetAttribute("width", "100%");
}
public void创建工具提示(T controlToAdd),其中T:IAttributeAccessor,Control
{
// ....
controlToAdd.SetAttribute(“宽度”、“100%”);
}

因此,如果它实际上是一个
网络控件
控件
的子类),那么您可以将其强制转换为它并使用它的<代码>控件本身没有属性属性,正如您已经注意到的:

WebControl wc = controltoadd as WebControl;
if(wc != null)
{
    // wc.Attributes.Add...
}
如果是
HtmlControl
将其转换为:

else
{
    HtmlControl hc = controltoadd as HtmlControl;
    if(hc != null)
    {
        // hc.Attributes.Add...
    }
}
另一种选择是使其成为仅接受实现的控件的通用方法。
HtmlControl
WebControl
都实现了该接口以获取/设置属性:

public void CreateTooltip<T>(T controlToAdd)where T: IAttributeAccessor, Control
{
    // ....
    controlToAdd.SetAttribute("width", "100%");
}
public void创建工具提示(T controlToAdd),其中T:IAttributeAccessor,Control
{
// ....
controlToAdd.SetAttribute(“宽度”、“100%”);
}

我认为,你需要将其转换为
网络控制
HtmlGenericControl
<代码>控件不包含属性
属性
。您可以使用
is
测试传递的对象是什么

if (control is WebControl)
{
    var webControl = (WebControl)control;
}
或者,如果您喜欢将
用作

var webControl = control as WebControl;

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

我相信你需要将它转换成
WebControl
HtmlGenericControl
<代码>控件
不包含属性
属性
。您可以使用
is
测试传递的对象是什么

if (control is WebControl)
{
    var webControl = (WebControl)control;
}
或者,如果您喜欢将
用作

var webControl = control as WebControl;

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

我相信你需要将它转换成
WebControl
HtmlGenericControl
<代码>控件
不包含属性
属性
。您可以使用
is
测试您传递的对象是什么。谢谢!它就像一个符咒我想回答一下!:)您可以使其成为一个具有约束的通用方法。
HtmlControl
WebControl
都实现了该接口以获取/设置属性。我认为您需要将其转换为
WebControl
HtmlGenericControl
<代码>控件
不包含属性
属性
。您可以使用
is
测试您传递的对象是什么。谢谢!它就像一个符咒我想回答一下!:)您可以使其成为一个具有约束的通用方法。
HtmlControl
WebControl
都实现了该接口以获取/设置属性。