通过编程知道要使用哪个.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;知道我的意思吗?我在网上找不到任何东西,所以我认为这是不可能的,但我只是想知道。
当然有办法。其中之一是:
// 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];