7

VB と同じ暗黙の定義を使用して、次のサンプル コードを C# に変換する方法を見つけようとしています。ボタンとジェネリック コントロールを 2 つのオブジェクトとして定義して機能させることができることはわかっていますが、VB と同じように C# で同じ変数 "ctlHTML" を使用したいと考えています。誰かがこれについて助けることができますか?

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
4

3 に答える 3

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);
}
于 2013-05-07T23:43:02.857 に答える
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);
    }
}
于 2013-05-07T23:43:54.000 に答える
1

HtmlGenericControlHtmlButtonは両方とも から継承しているためHtmlControl、ctlHTML をその型 ( HtmlControl) として宣言すると機能します。

ここを参照してください: http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlcontrol.aspx

于 2013-05-07T23:45:44.997 に答える