使用分配的某种类型的变量进行强制转换
本文关键字:变量 转换 类型 分配 种类 | 更新日期: 2023-09-27 18:30:48
我想做的是做需要将我的控件添加到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.....
无法解析此符号类型ToCast
以前有人做过类似的事情吗?
感谢您的提前:)
解决:
我所做的是为Component
类型投射我的就绪控件。 panel.Items.Add((Component)control);
错误是因为强制转换表达式的类型部分必须是类型(或类型参数)的名称 - 而不是表达式的值。
你为什么觉得你需要选角?为什么不只是:
panel.Items.Add(new Ext.Net.NumericField());
你为什么要Control
演员阵容?NumericField
不是已经从Control
派生出来的吗?你为什么使用typeof
?基本上,我看不出您提供的代码中需要任何强制转换。如果您认为它们有充分的理由,请为问题添加更多上下文。
通过一些重构,您应该能够在不使用太多强制转换的情况下构建相同的结果。下面的示例演示了一种非常简化的方法。
例
<%@ 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>