我正在使用C#在VS2012中为Windows Phone 8.0开发应用程序
我的代码运行正常,但是它太长了,我认为在一行代码中有一个字符串格式可以做同样的事情 问题是我不知道该怎么做
示例:我需要通过按钮的名称将按钮内容文本字符串分配给正确的TextBlock(btn2 - > t2,btn3 - > t3)
有8个按钮(btn1 ... btn8)和8个TextBlocks(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();
答案 0 :(得分:1)
您可以使用您的字母数和必须更改的控件初始化Dictionary<int, TextBlock>
,只需参考输入的字母数:
dic[lettersTyped].Text = btn.Content.ToString();
如果您不想手动初始化所有块,可以通过解析文本块ID来初始化目录。但是我没有看到你在一行中做任何事情(除非它是一个长行)
伪代码:
答案 1 :(得分:1)
制作全球(私人/公共/其他)字典:
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;
}
发件人是您单击的按钮,因此您只需从中获取文本并将其附加到分配给“词典”中“按钮”的TextBox。 这样您就不需要处理任何列表索引。
答案 2 :(得分:0)
您可以将所有文本块添加到列表中并相应地处理:
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();
}
答案 3 :(得分:0)
如果您的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();