【问题标题】:How to use int i for selecting text box NR如何使用 int i 选择文本框 NR
【发布时间】:2017-04-11 19:49:26
【问题描述】:

我有 10 个文本框。比如textBox1.TexttextBox2.Text等等。我需要使用textBox2.Text if i=2textBox2.Text if i =3 等等。 我做到了:

string t = "textBox"+i+".Text";

但结果以“textBox1.Text”的形式出现。 如何将“i”值插入文本框名称而不是 1。并将结果作为 textBox1.Text 所以我可以将它用作名称并将值从文本框传递到我的程序。

【问题讨论】:

  • 这是一个 Web 应用程序(WebForms、MVC 等)还是桌面应用程序(WinForms、WPF 等)。两者都有“文本框”控件,但答案会因您正在开发的世界而大不相同。
  • 如果 i=2,我需要使用 textBox2.Text。 textBox2.Text 如果 i =3 等等。 嗯?
  • 它的 winForm 应用程序

标签: c# string winforms names


【解决方案1】:

根据我认为您要问的内容,您可以将每个 TextBox 的引用存储在一个数组中,然后使用您的 int 来引用它。

TextBox[] boxes = new TextBox[10];
boxes[0] = textBox1;
// ... follow the pattern
boxes[9] = textBox10;

string value = boxes[i-1].Text; // Gets the value of the textBoxi.Text

【讨论】:

  • 我无法将 textBox1.Text 放入数组。我收到一条消息:无法将类型“字符串”隐式转换为“System.Windows.Forms.TextBox”
  • @RaimondasLukosius - 看看我写的代码示例。您不要将textBox1.Text 放入数组中,您只需将textBox1 放入数组中。然后,当您需要文本时,您可以调用 boxes[i-1].Text
  • 您的方法很简单,效果很好我刚刚意识到其中一个框是名为 textBox1 的组合框。当我更换这个时一切顺利。
  • 感谢您的帮助:)
【解决方案2】:

你可以这样做:

private TextBox GetTB(int i) {
    string name = "textBox" + i.ToString();
    foreach (var ctrl in Controls) {
         var tbox = ctrl as TextBox;
         if (tbox?.Name == name) return tbox;
    }
    return null
}

【讨论】:

  • 不只是 textBox +i 它的 textBox +1+.Text
  • 该方法只是获取您需要的文本框。所以你使用它就像var tb = GetTB(2)?.Text;
  • 我需要在 textBox 和 .Text 之间插入 i
【解决方案3】:

如果您需要以这种方式在 C# 代码中访问它们,最简单的方法是维护这些文本框的数组或 List,并按其数值顺序进行索引。然后您可以简单地引用textBoxes[i-1] 并获取编号为“i”的文本框。如何获得该数组取决于您正在开发的内容。对于 WinForms,您可以在 Form.Controls 属性上使用一点 Linq:

    public static IEnumerable<Control> Flatten(this IEnumerable<Control> controls)        
    {
        var results = new List<Control>();

        foreach (var control in controls)
        {
            results.Add(control);
            control.Controls.OfType<Control>().Flatten(results);
        }

        return results;
    }

    private static void Flatten(this IEnumerable<Control> controls, List<Control> results)
    {
        foreach (var control in controls)
        {
            results.Add(control);
            control.Controls.OfType<Control>().Flatten(results);
        }
    }

    ...

    var textboxes = Form.Controls.Flatten()
                    .OfType<TextBox>()
                    .Where(t=>t.Name.StartsWith("textBox"))
                    .OrderBy(t=>t.Name)
                    .ToArray();

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多