通过编程知道要使用哪个.NET文本框?结尾附有数字的多个文本框

本文关键字:文本 结尾 数字 编程 NET | 更新日期: 2023-09-27 18:29:08

我现在有一个在.NET中制作的游戏。现在我有这样的东西来确定哪个文本框属于哪个玩家:

switch(player.ID) {
    case 1: storeRandPlayerInfo = textbox1.Text;
    break;
    case 2: storeRandPlayerInfo = textbox2.Text;
    break;
    case 3: storeRandPlayerInfo = textbox3.Text;
    break;
}

我的问题是,有没有一种方法可以像Windows.Textbox["Textbox"+player.ID].Text;知道我的意思吗?我在网上找不到任何东西,所以我认为这是不可能的,但我只是想知道。

通过编程知道要使用哪个.NET文本框?结尾附有数字的多个文本框

当然有办法。其中之一是:

// define and init
TextBox[] playerBoxes = new TextBox[] { textBox1, textBox2, textBox3 };
// use 
storeRandPlayerInfo = playerBoxes[player.ID - 1];

您可以执行类似的操作

private TextBox GetPlayerTextBox(int playerId)
        {
            string textBoxName = string.Format("TextBox{0}", playerId);
            return this.Controls.OfType<TextBox>().Where(t => t.Name == textBoxName).Single();
        }

您可以只使用"this.Controls"的索引(请注意,"this.Controls"将只包含表单上的顶级控件,例如groupBox中的控件将位于"this.groupBox1.Controls"中的集合中,因此索引到该集合而不是"this.Controls")

    private TextBox getPlayersBox(int player)
    {
        string expected = "textBox" + player.ToString();
        if (this.Controls.ContainsKey(expected))
            return this.Controls[expected] as TextBox;
        else
            return null;
    } 

就我个人而言,我会使用字典;您正在描述映射,而这正是字典最擅长的。你可以用你的ID,也可以用物体本身:

// using ID as the key
private readonly Dictionary<int, TextBox> mPlayerTextBoxes;
// ...or using object as the key
private readonly Dictionary<Player, TextBox> mPlayerTextBoxes;
// in form constructor, after InitializeComponent call:
// using ID as the key
mPlayerTextBoxes = new Dictionary<int, TextBox>
{
   { player1.ID, textbox1 },
   { player2.ID, textbox2 },
   { player3.ID, textbox3 }
};
// using object as the key
mPlayerTextBoxes = new Dictionary<Player, TextBox>
{
   { player1, textbox1 },
   { player2, textbox2 },
   { player3, textbox3 }
};
// then when you want a textbox, given a player:
// using ID    
TextBox textBox = mPlayerTextBoxes[player.ID];
// using object
TextBox textBox = mPlayerTextBoxes[player];