在没有 switch 语句的情况下将文本分配给正确的按钮
assiging text to the correct button without switch statement
正在用 C# 在 VS2012 中为 windows phone 8.0 开发应用程序
我的代码工作正常,但它太长了,我认为有一种字符串格式可以在 1 行代码中执行相同的操作
问题是我不知道该怎么做
示例:我需要通过按钮名称将按钮内容文本字符串分配给正确的 TextBlock(btn2 --> t2,btn3 --> t3)
有 8 个按钮 (btn1...btn8) 和 8 个文本块 (t1.....t8)
所以我有这段代码并且它有效:
private void LetterClicked(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
switch (lettersTyped)
{
case 1:
t1.Text = btn.Content.ToString();
break;
case 2:
t2.Text = btn.Content.ToString();
break;
case 3:
t3.Text = btn.Content.ToString();
break;
case 4:
t4.Text = btn.Content.ToString();
break;
case 5:
t5.Text = btn.Content.ToString();
break;
case 6:
t6.Text = btn.Content.ToString();
break;
case 7:
t7.Text = btn.Content.ToString();
break;
case 8:
t8.Text = btn.Content.ToString();
break;
}
}
我想要其他不使用 switch 语句的方法
喜欢:t"The code determines the number".Text = btn.Content.ToString();
您可以将所有文本块添加到列表中并进行相应处理:
List <TextBlock> TBlocks=new List<TextBlock>();
TBlocks.Add(t1);
...
TBlocks.Add(t8);
private void LetterClicked(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
TBlocks[lettersTyped-1].Text= btn.Content.ToString();
}
您可以使用您的字母计数和必须更改的控件来初始化 Dictionary<int, TextBlock>
,并且仅参考键入的字母数:
dic[lettersTyped].Text = btn.Content.ToString();
如果您不想手动初始化所有块,可以通过解析文本块 ID 来初始化您的目录。但是我看不出有什么方法可以让你在一行中完成它(除非它是一条长线)
伪代码:
- 找到所有相关的文本块(例如,所有带有 textxxx 和 xxx 数字形式的 id 的文本块)
- 提取每个文本块 tb 的 id 的数字部分
- 在字典中添加一个键 xxx 和值控制 tb 的条目
- 使用字典取消引用正确的文本块[键入的键]
如果您的 TextBlock
在一个容器中,例如 StackPanel
,例如:
<StackPanel x:Name="container">
<TextBlock x:Name="t1" />
<TextBlock x:Name="t2" />
<TextBlock x:Name="t3" />
<TextBlock x:Name="t4" />
<TextBlock x:Name="t5" />
<TextBlock x:Name="t6" />
<TextBlock x:Name="t7" />
<TextBlock x:Name="t8" />
</StackPanel>
然后你可以通过索引获取它们。
TextBlock tb = container.Children[lettersTyped - 1] as TextBlock; // Convert lettersTyped to 0-based index
tb.Text = btn.Content.ToString();
创建一个全局(private/public/whatever)字典:
private Dictionary<Button, TextBox> dict;
然后在某处初始化它(例如页面的构造函数):
dict = new Dictionary<Button, TextBox>()
{
{ btn1, t1 },
{ btn2, t2 }
};
最后,您将同一个 Click 处理程序附加到所有按钮:
private void button_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
dict[btn].Text = btn.Text;
}
Sender 是您单击的 Button,因此您只需从中获取文本并将其附加到分配给 Dictionary 中的 Button 的 TextBox。
这样您就不需要处理任何列表索引。
正在用 C# 在 VS2012 中为 windows phone 8.0 开发应用程序
我的代码工作正常,但它太长了,我认为有一种字符串格式可以在 1 行代码中执行相同的操作 问题是我不知道该怎么做
示例:我需要通过按钮名称将按钮内容文本字符串分配给正确的 TextBlock(btn2 --> t2,btn3 --> t3)
有 8 个按钮 (btn1...btn8) 和 8 个文本块 (t1.....t8)
所以我有这段代码并且它有效:
private void LetterClicked(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
switch (lettersTyped)
{
case 1:
t1.Text = btn.Content.ToString();
break;
case 2:
t2.Text = btn.Content.ToString();
break;
case 3:
t3.Text = btn.Content.ToString();
break;
case 4:
t4.Text = btn.Content.ToString();
break;
case 5:
t5.Text = btn.Content.ToString();
break;
case 6:
t6.Text = btn.Content.ToString();
break;
case 7:
t7.Text = btn.Content.ToString();
break;
case 8:
t8.Text = btn.Content.ToString();
break;
}
}
我想要其他不使用 switch 语句的方法
喜欢:t"The code determines the number".Text = btn.Content.ToString();
您可以将所有文本块添加到列表中并进行相应处理:
List <TextBlock> TBlocks=new List<TextBlock>();
TBlocks.Add(t1);
...
TBlocks.Add(t8);
private void LetterClicked(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
TBlocks[lettersTyped-1].Text= btn.Content.ToString();
}
您可以使用您的字母计数和必须更改的控件来初始化 Dictionary<int, TextBlock>
,并且仅参考键入的字母数:
dic[lettersTyped].Text = btn.Content.ToString();
如果您不想手动初始化所有块,可以通过解析文本块 ID 来初始化您的目录。但是我看不出有什么方法可以让你在一行中完成它(除非它是一条长线)
伪代码:
- 找到所有相关的文本块(例如,所有带有 textxxx 和 xxx 数字形式的 id 的文本块)
- 提取每个文本块 tb 的 id 的数字部分
- 在字典中添加一个键 xxx 和值控制 tb 的条目
- 使用字典取消引用正确的文本块[键入的键]
如果您的 TextBlock
在一个容器中,例如 StackPanel
,例如:
<StackPanel x:Name="container">
<TextBlock x:Name="t1" />
<TextBlock x:Name="t2" />
<TextBlock x:Name="t3" />
<TextBlock x:Name="t4" />
<TextBlock x:Name="t5" />
<TextBlock x:Name="t6" />
<TextBlock x:Name="t7" />
<TextBlock x:Name="t8" />
</StackPanel>
然后你可以通过索引获取它们。
TextBlock tb = container.Children[lettersTyped - 1] as TextBlock; // Convert lettersTyped to 0-based index
tb.Text = btn.Content.ToString();
创建一个全局(private/public/whatever)字典:
private Dictionary<Button, TextBox> dict;
然后在某处初始化它(例如页面的构造函数):
dict = new Dictionary<Button, TextBox>()
{
{ btn1, t1 },
{ btn2, t2 }
};
最后,您将同一个 Click 处理程序附加到所有按钮:
private void button_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
dict[btn].Text = btn.Text;
}
Sender 是您单击的 Button,因此您只需从中获取文本并将其附加到分配给 Dictionary 中的 Button 的 TextBox。 这样您就不需要处理任何列表索引。