1

私がやろうとしているのは、コントロールをに追加するために必要なキャストを行うことですExt.Net.Panel

これは私のコード例です:

   Ext.Net.Panel panel = new Ext.Net.Panel();
   Control control = (Control) null;//here can be any Ext.Net type as well as NumeticField for example Ext.Net.TextArea and so on
  switch (infoAttribute.Type)
                                {
                                        case PropertyTypeAttrib.Text:
                                            control = (Control)new Ext.Net.TextField();
                                            ((TextField)control).FieldLabel = infoAttribute.HeadLine;
                                            control.ID = propertyHelper.Name;
                                            //panel.Items.Add((TextField)control);
                                        typeToCast = typeof (TextField);
                                        break;
                                    case PropertyTypeAttrib.FileUrl:
                                        control = (Control) new Ext.Net.HyperLink();
                                        control.ID = propertyHelper.Name;
                                        ((Ext.Net.Label) control).FieldLabel = infoAttribute.HeadLine;

                                        //panel.Items.Add((Ext.Net.HyperLink) control);
                                        typeToCast = typeof (Ext.Net.HyperLink);
                                        break;
                                    case PropertyTypeAttrib.Enum:
                                        control = (Control) new MMPControls.Web.ComboBoxEnumExt();
                                        ((MMPControls.Web.ComboBoxEnumExt) control).EnumerationTypeName =
                                            propertyHelper.PropertyType.Name;
                                        control.ID = propertyHelper.Name;
                                        ((MMPControls.Web.ComboBoxEnumExt) control).FieldLabel = infoAttribute.HeadLine;
                                        //panel.Items.Add((MMPControls.Web.ComboBoxEnumExt) control);
                                        typeToCast = typeof (MMPControls.Web.ComboBoxEnumExt);
                                        break;
                                    case PropertyTypeAttrib.Date:
                                        control = new MMPControls.Web.DateSelect();
                                        control.ID = propertyHelper.Name;
                                        //panel.Items.Add(
                                            //(MMPControls.Web.DateSelect) control);
                                        //panel.Items.Add((MMPControls.Web.DateSelect)control);
                                        typeToCast = typeof (MMPControls.Web.DateSelect);
                                        break;
                                    case PropertyTypeAttrib.DateTime:
                                        control = new MMPControls.Web.DateSelect();
                                        control.ID = propertyHelper.Name;
                                        //panel.Items.Add(
                                            //(MMPControls.Web.DateSelect)control);
                                        typeToCast = typeof (MMPControls.Web.DateSelect);
                                        break;
                                    case PropertyTypeAttrib.TextInteger:
                                        control = (Control)new Ext.Net.NumberField();
                                        ((NumberField)control).AllowDecimals = false;
                                        ((NumberField)control).MinValue = 0;
                                        ((Ext.Net.NumberField)control).FieldLabel = infoAttribute.HeadLine;
                                        control.ID = propertyHelper.Name;
                                        //panel.Items.Add(
                                            //(Ext.Net.NumberField) control);
                                        typeToCast = typeof (Ext.Net.NumberField);
                                        break;
                                    case PropertyTypeAttrib.IList:
                                        //TODO: 
                                        break;
                                    case PropertyTypeAttrib.ImageUrl:
                                        control = (Control)new Ext.Net.Image();
                                        control.ID = propertyHelper.Name;
                                        ((Ext.Net.Image)control).FieldLabel = infoAttribute.HeadLine;
                                        //panel.Items.Add((Ext.Net.Image) control);
                                        typeToCast = typeof (Ext.Net.Image);
                                        break;
                                    case PropertyTypeAttrib.TextFractional:
                                        control = (Control)new Ext.Net.NumberField();
                                        ((NumberField)control).AllowDecimals = true;
                                        ((NumberField)control).DecimalPrecision = infoAttribute.Fractional;
                                        ((NumberField)control).MinValue = 0;
                                        ((Ext.Net.NumberField)control).FieldLabel = infoAttribute.HeadLine;
                                        control.ID = propertyHelper.Name;
                                       //panel.Items.Add(
                                            //(Ext.Net.NumberField) control);
                                        typeToCast = typeof (Ext.Net.NumberField);
                                        break;
                                    case PropertyTypeAttrib.TextLarge:
                                        control = (Control)new Ext.Net.TextArea();
                                        ((TextArea)control).FieldLabel = infoAttribute.HeadLine;
                                        control.ID = propertyHelper.Name;
                                        //panel.Items.Add((TextArea)control);
                                        typeToCast = typeof (TextArea);
                                        break;
   }
   panel.Items.Add((typeToCast)control);//that's what i need to do.

行でエラーが発生しましたが、panel.Items.....このシンボル typeToCast を解決できません

誰かが前に似たようなことをしましたか?

前もってありがとう:)

解決済み:

私がしたことは、準備ができたコントロールをComponent型にキャストすることでした。 panel.Items.Add((Component)control);

4

2 に答える 2

3

エラーは、キャスト式の型部分が、式の値ではなく、型 (または型パラメーター) の名前でなければならないためです。

なぜキャストする必要があると思いますか?それだけではない理由:

panel.Items.Add(new Ext.Net.NumericField());

なぜキャストを持っているのControlですか?NumericFieldからまだ派生していませんかControl? なぜあなたは使用していtypeofますか?基本的に、提示されたコードにキャストの必要はありません。正当な理由があると思われる場合は、質問にコンテキストを追加してください。

于 2012-04-11T10:06:30.587 に答える
1

少しリファクタリングするだけで、多くのキャストを使用せずに同じ結果を構築できるはずです。次のサンプルは、非常に単純化されたアプローチを示しています。

<%@ Page Language="C#" %>

<%@ Import Namespace="Panel=Ext.Net.Panel" %>
<%@ Import Namespace="Button=Ext.Net.Button" %>

<%@ Register assembly="Ext.Net" namespace="Ext.Net" tagprefix="ext" %>

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!X.IsAjaxRequest)
        {
            this.Form.Controls.Add(this.BuildForm());
        }
    }

    private Component BuildForm()
    {
        var panel = new FormPanel {
            Title = "Example",
            Width = 350,
            Height = 215,
            Padding = 5,
            DefaultAnchor = "100%",
            Buttons = { new Button { Text = "Submit" }}
        };

        panel.Items.Add(this.BuildWidget(new Widget {
            Name = "text",
            ID = "TextField1",
            Label = "My TextField"
        }));

        panel.Items.Add(this.BuildWidget(new Widget {
            Name = "date",
            ID = "DateField1",
            Label = "My DateField"
        }));

        return panel;
    }

    private Field BuildWidget(Widget widget)
    {
        Field field = null;

        switch(widget.Name)
        {
            case "text":
                field = new TextField(); 
                break;
            case "date":
                field = new DateField();
                break;
        }

        field.ID = widget.ID;
        field.FieldLabel = widget.Label;

        return field;
    }

    public class Widget
    {
        public string Name { get; set; }

        public string ID { get; set; }
        public string Label { get; set; }
    }
</script>

<!DOCTYPE html>

<html>
<head runat="server">
    <title>Ext.NET Example</title>
</head>
<body>
    <form runat="server">
        <ext:ResourceManager runat="server" />

    </form>
</body>
</html>
于 2012-04-11T13:18:47.277 に答える