編集:
8年後、この方法を使用しないでください!
WPFとデータバインディングについて学ぶことに時間を費やしてください。
この質問がどこから来たのかを知る必要がありますか?編集ボタンをクリックします。
ボタンの名前がButton1、Button2、Button3...のようになっている場合。
ここで使用できますFindChild<T>()
メソッドを取得します
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
これらの単純なタスクのコードで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>
コードビハインド:
using System.Windows;
using System.Linq;
namespace WpfApplication4
{
public partial class Window18 : Window
{
public Window18()
{
InitializeComponent();
DataContext = Enumerable.Range(0, 20).Select(x => "Item" + x);
}
}
}
これは私の画面でどのように見えるかです:
これは一種の汚い解決策ですが、フォーム上のすべてのボタンを操作する場合は、それだけの価値があります。私が知っている最も簡単な方法は、すべてのボタンをArrayList
(はい、手動で、それは面倒な部分です)に追加してから、そのリストをループすることです。
WiiMaxxのおかげで私は解決策を見つけました!
この方法を使用すると、データベースから取得したデータを使用してボタンのテキストを正常に設定できます。
foreach
ループになりましたが、今では必要に応じて正確に機能します。編集:for
バージョンを見つけました
私はWrapPanel
、を含み、buttons
そこに再び私のを含みますTextBlock's
。
私は(例:)でTextBlock's
始まるのではなく0
、余分なを作成する必要があったためです。これが誰かに役立つことを願っています。1
SubItem1txt
int
みんなありがとう :) !
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++;
}