【问题标题】:Equivalent to refer to control by variable name?相当于通过变量名来引用控制?
【发布时间】:2013-01-12 18:58:09
【问题描述】:

在 VB 中,我可以循环访问控件,或者通过将变量连接到字符串来引用控件。比如:

Dim I as integer
I = 1
Me["Textbox" & I].Text = "Some text"

最后一条语句的 C# 等价物是什么?

【问题讨论】:

  • 你确定这条线Me["Textbox" & I].Text = "Some text"在VBNet中有效吗?
  • 不确定 VB.net,但肯定是正常的 VB 和 VBA。我认为该行为将被转移到 VB.net
  • 他为什么要去掉C#标签?这显然是一个关于如何在 C# 中做某事的问题!或者他至少应该添加 WinForms 标签。

标签: c# vb.net winforms controls


【解决方案1】:

您可以通过控件的名称访问该控件:

Me.Controls("TextBox" & I).Text = "Some text"

在 C# 中也是如此:

this.Controls["TextBox" + I].Text = "Some text";

【讨论】:

  • C# 没有 Me 集合。用这个替换我也不起作用。不用等。使用控件集合可能会起作用...
【解决方案2】:
 int I = 1;
 this["Textbox" + I].Text = "some text";

 int I = 1;
 this.Page["Textbox" + I].Text = "some text";

 int I = 1;
 this.Controls["Textbox" + I].Text = "some text";

【讨论】:

  • 好像这行不通。需要指定 Controls 集合。
【解决方案3】:

接近 SysDragan 的解决方案,但我只需要用这个替换。是的,您需要指定 Controls 集合。

this.Controls["TextBox" & I].Text = "Some text";

【讨论】:

    【解决方案4】:
    int i = 1;
    this.Controls["TextBox" & i].Text = "Some text";
    

    上面的代码假设它在一个控件/表单中。

    【讨论】:

    • 这不会给出任何编译错误,但在运行时会给出控件为空的错误。在即时窗口中,它会说 this.Controls["MyControl1") 有一个值,但如果我将它分配给某个东西,错误是 this.Controls["MyControl1"]' 为 null
    • 可能的问题 (1) 名为“TextBox1”的控件未定义 (2) 不是“IN”此控件而是子控件 (3) 控件已加载。
    • 1.如果我不使用该变量,它被定义为我可以从 this.MyControl 读取和值。所以我猜它不在 Controls 集合中。将搜索更多。
    • 它最有可能在面板或其他东西内部。
    • 是的,它是一个子控件。它位于选项卡控件上。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多