在没有switch语句的情况下将文本分配给正确的按钮

时间:2015-03-09 10:41:13

标签: c# string windows-phone-8

我正在使用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();

4 个答案:

答案 0 :(得分:1)

您可以使用您的字母数和必须更改的控件初始化Dictionary<int, TextBlock>,只需参考输入的字母数:

dic[lettersTyped].Text = btn.Content.ToString();

如果您不想手动初始化所​​有块,可以通过解析文本块ID来初始化目录。但是我没有看到你在一行中做任何事情(除非它是一个长行)

伪代码:

  • 找到所有相关的文本块(例如,所有文本块的id为textxxx,格式为xxx)
  • 提取每个文本块tb的id的数字部分
  • 使用键xxx和值控制tb
  • 在词典中添加一个条目
  • 使用字典[键入类型]
  • 取消引用正确的文本块

答案 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();
相关问题