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++;
}