【问题标题】:C# dynamic control names in .NET CF.NET CF 中的 C# 动态控件名称
【发布时间】:2011-02-20 10:50:36
【问题描述】:

我正在使用 c# 中的 .NET CF 框架,我想知道我是否可以像这样访问控件:

string field="txtName";
this.Controls[field];

或者这是不可能的?

【问题讨论】:

    标签: c# dynamic controls accessibility


    【解决方案1】:

    我认为您使用的方法是 FindControl - 您可以在任何带有 Controls 集合的东西上找到该方法。

    【讨论】:

    • 这将是完美的,但在紧凑框架我没有这个方法
    【解决方案2】:

    使用 Linq 怎么样?

    var myControl = this.Controls.Cast<Control>().OfType<WhateverControlType>().FirstOrDefault(cont => cont.ID == "myControlId");
    

    类似的东西?

    【讨论】:

    • 我使用了这个: var myControl = this.Controls.Cast().OfType().FirstOrDefault(cont => cont.Name = myStr);结果:错误 4 无法将 lambda 表达式转换为委托类型 'System.Func' 因为块中的某些返回类型不能隐式转换为委托返回类型 D:\JOB\VS C#\ CONTIPLAY\V2\SmartDeviceProject1\Forms\frmMachines.cs 185 109 SmartDeviceProject1
    • 好吧,我没有在 VS 中尝试过,但我认为应该可以使用类似的东西。
    • 我明白了:你应该使用 '==' 而不是 '='
    • 如果可行,您可以将其设为 ControlCollection 上的扩展方法“FindControl”
    【解决方案3】:

    我不明白为什么会出错,索引器需要 string,而您传递的是 string,所以对我来说是正确的。

    【讨论】:

    • 一个控件集合需要一个 int,你需要 FindControl
    • this.Controls 需要整数索引。我想知道我是否可以按名称访问控件。
    • 是的,你是对的,我太快了......正如其他人所说,你需要使用FindControl 方法。 (我应该写“如果索引器期望...” :-)
    【解决方案4】:

    可以通过名称(stirng)或索引(int)引用控件集合中的控件。您唯一需要做的就是将控件转换为对象类型。类似于以下内容。

    MyControl c (MyControl)this.Controls["ControlName"];

    享受吧!

    【讨论】:

    • 这也不好,因为索引器需要整数值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2011-03-31
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2017-04-12
    • 2013-02-22
    相关资源
    最近更新 更多