[英]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
不可用。 我使用控件是因為我永遠不知道參數中接收到的對象是哪種類型。
我相信您需要將其轉換為WebControl
或HtmlGenericControl
。 Control
不包含屬性Attributes
。 您可以使用來測試傳遞的對象is
。
if (control is WebControl)
{
var webControl = (WebControl)control;
}
或者,如果您更喜歡as
:
var webControl = control as WebControl;
if (webcontrol != null)
{
// code
}
因此,如果它實際上是WebControl
( Control
子類),則可以將其強制轉換為它並使用它的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
控件的通用方法。 HtmlControl
和WebControl
實現該接口以獲取/設置屬性。
public void CreateTooltip<T>(T controlToAdd)where T: IAttributeAccessor, Control
{
// ....
controlToAdd.SetAttribute("width", "100%");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.