我正在尝试弄清楚如何使用与VB相同的隐式定义将以下示例代码转换为C#。我知道我可以将按钮和通用控件定义为两个对象并使其工作,但我想在C#中使用相同的变量“ctlHTML”,就像VB一样。有人可以为此提供帮助吗?
Sub MySub(varInput As String, pnl As Panel)
Dim ctlHTML = Nothing
Select Case varInput
Case "btn"
ctlHTML = New HtmlButton
Case "lbl"
ctlHTML = New HtmlGenericControl()
End Select
With ctlHTML
.Style.Add("font-size", "14px")
End With
pnl.Controls.Add(ctlHTML)
End Sub
答案 0 :(得分:4)
您将无法直接转换代码。你必须给你的变量一个类型。支持所有成员的继承链中最高的类是HtmlControl
:
HtmlControl control = null;
switch(varInput)
{
case "btn":
control = new HtmlButton();
break;
case "lbl":
control = new HtmlGenericControl();
break;
}
if(control != null)
{
control.Style.Add("font-size", "14px");
pnl.Controls.Add(control);
}
答案 1 :(得分:4)
为了修改Style
属性,控件至少需要为HtmlControl
。因此,您需要将变量ctlHtml
声明为该类型。
您还应检查以确保ctlHtml
已正确初始化。
我相信你的代码应该是这样的:
public void MySub(string varInput, Panel pnl)
{
HtmlControl ctlHtml;
switch(varInput)
{
case "btn":
ctlHtml = new HtmlButton();
break;
case "lbl":
ctlHtml = new HtmlGenericControl();
break;
default:
ctlHtml = null;
break;
}
if (ctlHtml != null)
{
ctlHtml.Style.Add("font-size", "14px");
pnl.Controls.Add(ctlHtml);
}
}
答案 2 :(得分:1)
由于HtmlGenericControl
和HtmlButton
都继承自HtmlControl
,因此您可以将ctlHTML声明为该类型(HtmlControl
)并且它将起作用。
见这里:http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlcontrol.aspx