我有一个应用程序,我从数据库动态创建窗体上的控件.这很好用,但我的问题如下:
private Type activeControlType;
private void addControl(ContainerControl inputControl, string ControlName, string Namespace,
string ControlDisplayText, DataRow drow, string cntrlName)
{
Assembly assem;
Type myType = Type.GetType(ControlName + ", " + Namespace);
assem = Assembly.GetAssembly(myType);
Type controlType = assem.GetType(ControlName);
object obj = Activator.CreateInstance(controlType);
Control tb = (Control)obj;
tb.Click += new EventHandler(Cntrl_Click);
inputControl.Controls.Add(tb);
activeControlType = controlType;
}
private void Cntrl_Click(object sender, EventArgs e)
{
string test = ((activeControlType)sender).Text; //Problem ???
}
Run Code Online (Sandbox Code Playgroud)
如何动态地将发送方对象转换为可以引用其属性字段的类.
我用谷歌搜索,发现自己正在尝试我遇到的一切.....现在我非常困惑......需要一些帮助
日Thnx
JT
您只能转换为编译时已知的类型.因此,您需要使用已经可以强制转换的已知基类或接口,或者需要使用反射.在C#4中,基于反射的方法比早期版本更容易,因为它引入了dynamic关键字.在可能的情况下,我更喜欢静态类型的方法.
在C#4中,您可以使用dynamic:
dynamic dynSender=(dynamic)sender;
dynSender.Text="A";
Run Code Online (Sandbox Code Playgroud)
或者,如果您知道它来自Control:
Control controlSender=(Control)sender;
controlSender.Text="A";
Run Code Online (Sandbox Code Playgroud)
由于您已经Control在您的创建代码中进行了转换,因此您知道您的对象来自Control您的示例.而且由于Text声明属性Control足以访问它.
| 归档时间: |
|
| 查看次数: |
11554 次 |
| 最近记录: |