【问题标题】:Loop and Array - Show Strings循环和数组 - 显示字符串
【发布时间】:2016-10-26 23:27:14
【问题描述】:

我正在尝试使用以下代码显示一组变量,其中包含从后面的代码 (C#) 到 XAML 中的 Textblock 的字符串:

 Textblock1.Text = String1Class;
 Textblock2.Text = String2Class;
 Textblock3.Text = String3Class;
 Textblock4.Text = String4Class;
 Textblock5.Text = String5Class;
 Textblock6.Text = String6Class;

代码有效,但一遍又一遍地写同样的东西很痛苦。 我想问问有没有更好的方法。我知道它与数组和循环有关,但我对 C# 和 WPF 不是很熟悉。

【问题讨论】:

    标签: c# arrays wpf string loops


    【解决方案1】:

    鉴于您对每个 StringXClass 值都有单独的变量,如果您想保持变量相同,则需要这样做:

    var tbs = new [] { Textblock1, Textblock2, Textblock3, Textblock4, Textblock5, Textblock6, };
    var scs = new [] { String1Class, String2Class, String3Class, String4Class, String5Class, String6Class, };
    
    for (var i = 0; i < tbs.Length; i++)
    {
        tbs.Text = scs;
    }
    

    另一种方法是首先设置一个数组。

    var StringClass = new string[6];
    

    然后在您的代码中将String1Class 替换为StringClass[0],将String2Class 替换为StringClass[1] 等。

    然后这样写:

    var tbs = new [] { Textblock1, Textblock2, Textblock3, Textblock4, Textblock5, Textblock6, };
    for (var i = 0; i < tbs.Length; i++)
    {
        tbs.Text = StringClass[i];
    }
    

    【讨论】:

    • 做到了!谢谢!
    【解决方案2】:

    如果 TextBlocks 在同一个父级中,您可以循环它们:

    string controlName = "TextBlock";
    int startIndex = 1;
    int endIndex = 100;
    
    List<string>  stringList = new List<string>();
    for(int i = 0; i < 100 ; i++)
        stringList.Add("string"+(i+1).ToString());
    
    for(int i = startIndex; i<=endIndex; i++)
    {
        foreach(control c in TextBlock1.Parent.Controls)//Or if you know the actual parent to which all the textBoxes belong
        {
            if(c.Name == (controlName+i))
            {               
                (c as TextBlock).Text = stringsList[i-1]; //since our start index starts with 1. 
                break;                   
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      XAML:

      <StackPanel>
          <TextBlock Name="TextBlock1"></TextBlock>
          <TextBlock Name="TextBlock2"></TextBlock>
          <TextBlock Name="TextBlock3"></TextBlock>
          <TextBlock Name="TextBlock4"></TextBlock>
      </StackPanel>
      

      代码:

      TextBlock[] textboxes = { TextBlock1, TextBlock2, TextBlock3, TextBlock4 };
      string[] list = { "TextBlock 1", "TextBlock 2", "TextBlock 3", "TextBlock 4" };
      
      for (int i = 0; i < textboxes.Length; i++)
      {
          textboxes[i].Text = list[i];
      }
      

      输出:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多