Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置多个按钮。在for(each)循环中设置内容 编辑:已解决_C#_Wpf_List_Foreach - Fatal编程技术网

C# 设置多个按钮。在for(each)循环中设置内容 编辑:已解决

C# 设置多个按钮。在for(each)循环中设置内容 编辑:已解决,c#,wpf,list,foreach,C#,Wpf,List,Foreach,到目前为止,我找到了解决方案: for (int i = 0; i < SPItems.Count; i++) { SubItem1txt.Text = SPItems[i]; i++; SubItem2txt.Text = SPItems[i]; i++; SubItem3txt.Text = SPItems[i]; i++; SubItem4txt.Text

到目前为止,我找到了解决方案:

        for (int i = 0; i < SPItems.Count; i++)
        {
            SubItem1txt.Text = SPItems[i]; i++;
            SubItem2txt.Text = SPItems[i]; i++;
            SubItem3txt.Text = SPItems[i]; i++;
            SubItem4txt.Text = SPItems[i]; i++;
            SubItem5txt.Text = SPItems[i]; i++;
            SubItem6txt.Text = SPItems[i]; i++;
            SubItem7txt.Text = SPItems[i]; i++;
            SubItem8txt.Text = SPItems[i]; i++;
        }
for(int i=0;i
现在,为了澄清问题,我使用了如下查询:
SELECT*fromtable LIMIT 8
来填充我的
List SPItems=new List()这意味着我的列表总是包含8个或更少的值

当然,在我的
for loop
中,循环将尝试填充所有8个按钮

但是如果我的列表中的值的数量小于。。。5或6,它抛出
ArgumentOutOfRangeException:索引超出范围

我如何解决这个问题


我有一个
List SPItems=newlist()包含从数据库检索的数据的列表

我想在列表中循环,对于
SPItems
中的每个项目,我想设置不同的
按钮的内容

假设我的列表包含:

  • 价值1
  • 价值2
  • 价值3
我现在需要的是:

  • 按钮1.内容=值1
  • 按钮2。内容=值2
  • 按钮3。内容=值3
      这是一种肮脏的解决方案,但如果您要操作表单上的所有按钮,那么它是值得的。据我所知,最简单的方法是将所有按钮添加到
      ArrayList
      (是的,手动操作,这是最痛苦的部分),然后在该列表上循环。

      这是一种肮脏的解决方案,但如果你要操作表单上的所有按钮,这是值得的。据我所知,最简单的方法是将所有按钮添加到
      ArrayList
      (是的,手动,这是最痛苦的部分),然后在该列表上循环。

      不要为这些简单任务操作代码中的UI元素。这是WPF满足您要求的方式:

      <Window x:Class="WpfApplication4.Window18"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              Title="Window18" Height="300" Width="300">
          <ItemsControl ItemsSource="{Binding}">
              <ItemsControl.ItemTemplate>
                  <DataTemplate>
                      <Button Content="{Binding}" Margin="2"/>
                  </DataTemplate>
              </ItemsControl.ItemTemplate>
          </ItemsControl>
      </Window>
      
      这是我的屏幕中的外观:


      对于这些简单任务,不要在代码中操纵UI元素。这是WPF满足您要求的方式:

      <Window x:Class="WpfApplication4.Window18"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              Title="Window18" Height="300" Width="300">
          <ItemsControl ItemsSource="{Binding}">
              <ItemsControl.ItemTemplate>
                  <DataTemplate>
                      <Button Content="{Binding}" Margin="2"/>
                  </DataTemplate>
              </ItemsControl.ItemTemplate>
          </ItemsControl>
      </Window>
      
      这是我的屏幕中的外观:


      如果您的按钮命名为Button1、Button2、Button3

      您可以使用
      FindChild()


      如果您的按钮名为Button1、Button2、Button3

      您可以使用
      FindChild()

      多亏了我找到了解决办法

      通过使用,我成功地使用从数据库检索到的数据设置了按钮文本

      它变成了一个
      foreach
      循环,但现在它完全按照需要工作编辑:找到版本的

      我有一个
      WrapPanel
      ,其中包含我的
      按钮
      ,其中再次包含我的
      文本块

      因为我的
      TextBlock
      不是以
      0
      开头,而是以
      1
      开头(例如:
      subitem1text
      ),所以我需要创建一个额外的
      int
      。我希望这对某人有用

      谢谢大家:)

      foreach版本:
      inti=1;
      int a=0;
      foreach(SPItems中的字符串spi)
      {
      WrapPanel pnl=UIHelper.FindChild(这是“子项”);
      按钮btn=UIHelper.FindChild(pnl,“子项”+i);
      TextBlock tb=UIHelper.FindChild(btn,“子项”+i+“txt”);
      btn.Visibility=可见性.Visibility;
      tb.Text=SPItems[a];
      a++;
      i++;
      }
      
      版本:
      inti=1;
      对于(int a=0;a
      多亏了我找到了解决方案

      通过使用,我成功地使用从数据库检索到的数据设置了按钮文本

      它变成了一个
      foreach
      循环,但现在它完全按照需要工作编辑:找到版本的

      我有一个
      WrapPanel
      ,其中包含我的
      按钮
      ,其中再次包含我的
      文本块

      因为我的
      TextBlock
      不是以
      0
      开头,而是以
      1
      开头(例如:
      subitem1text
      ),所以我需要创建一个额外的
      int
      。我希望这对某人有用

      谢谢大家:)

      foreach版本:
      inti=1;
      int a=0;
      foreach(SPItems中的字符串spi)
      {
      WrapPanel pnl=UIHelper.FindChild(这是“子项”);
      按钮btn=UIHelper.FindChild(pnl,“子项”+i);
      TextBlock tb=UIHelper.FindChild(btn,“子项”+i+“txt”);
      btn.Visibility=可见性.Visibility;
      tb.Text=SPItems[a];
      a++;
      i++;
      }
      
      版本:
      inti=1;
      对于(int a=0;a
      把按钮放在列表或数组中,而不是给它们起相似的名字,怎么样?这就是数组的目的为什么不将
      SPItems
      绑定到一个
      ItemsControl
      中的
      按钮呢?这个初始过程最多有8个值(8个按钮),如果按下另一个按钮,接下来的8个值将从我的数据库中检索出来……我认为似乎有一些误解。。我已经有我的纽扣了,我只是
      
      for(int i =0; i< SPItems.Count;i++) // iterates for each item in your SPItems
      {
           Button foundButton =  UIHelper.FindChild<Button>(Application.Current.MainWindow, "Button"+i);
      
           if(foundButton != null) //Protecteted agains trying to use Null-Reference
           {
                var foundButtonTextBlock =foundButton .Content as TextBlock
      
                if(foundButtonTextBlock != null)//Protecteted agains trying to add Text by Null-Reference
                     foundButtonTextBlock.Text  = SPItems[i];
           }
      }
      
       for(int i =0; i< SPItems.Count;i++) // iterates for each item in your SPItems
          {
               TextBlock foundTextBlock =  UIHelper.FindChild<TextBlock>(this, "SubItem"+1+i+"txt");
      
               if(foundTextBlock != null) //Protecteted agains trying to add Text by Null-Reference
               {
                    foundTextBlock .Text  = SPItems[i];
               }
          }
      
      int i =0;
      if(SPItems.Count >0)
      {
          SubItem1txt.Text = SPItems[i]; 
          i++;
      }
      if(SPItems.Count >1)
      {
          SubItem2txt.Text = SPItems[i];
          i++;
      }
      if(SPItems.Count >2)
      {
          SubItem3txt.Text = SPItems[i];
          i++;
      }
      if(SPItems.Count >3)
      {
          SubItem4txt.Text = SPItems[i]; 
          i++;
      }
      if(SPItems.Count >4)
      {
          SubItem5txt.Text = SPItems[i]; 
          i++;
      }
      if(SPItems.Count >0)
      {
          SubItem6txt.Text = SPItems[i];
          i++;
      }
      if(SPItems.Count >5)
      {
          SubItem7txt.Text = SPItems[i];
          i++;
      }
      if(SPItems.Count >6)
      {
          SubItem8txt.Text = SPItems[i];
          i++;
      }
      //..... never ever do this
      
      int i = 1;
      int a = 0;
      foreach (string spi in SPItems)
          {
              WrapPanel pnl = UIHelper.FindChild<WrapPanel>(this, "SubItems");
              Button btn = UIHelper.FindChild<Button>(pnl, "SubItem" + i);
              TextBlock tb = UIHelper.FindChild<TextBlock>(btn, "SubItem" + i + "txt");
              btn.Visibility = Visibility.Visible;
              tb.Text = SPItems[a];
              a++;
              i++;
          }
      
          int i = 1;
          for (int a = 0; a < SPItems.Count; a++)
          {
              WrapPanel pnl = UIHelper.FindChild<WrapPanel>(this, "SubItems");
              Button btn = UIHelper.FindChild<Button>(pnl, "SubItem" + i);
              TextBlock tb = UIHelper.FindChild<TextBlock>(btn, "SubItem" + i + "txt");
              btn.Visibility = Visibility.Visible;
              tb.Text = SPItems[a];
              i++;
          }