Grid
のWPFアプリケーションがあります。TextBox
が複数あります。私はどのようにしてボタンをクリックしてTextBox.Text = null;
を作ることができますか?複数のTextBoxのテキストを一度にクリア
答えて
これを試してみてください:
private void Button_Click(object sender, RoutedEventArgs e) {
foreach (UIElement element in this.grid.Children) {
TextBox textBox = element as TextBox;
if (textBox == null)
continue;
textBox.Text = null;
}
}
論理。
グリッドは、コントロールを視覚的にに整理するのに役立ちます。レイアウトコンテナです。決してあなたのコントロールを整理するために使用されるべきではありません論理的に、舞台裏。
私が言ったように、これはかなり一般的なアドバイスです。あなたのプログラムは他のアプローチの恩恵を受けるかもしれません。
また、LinqメソッドのOfTypeを使用することもできます:forech(TextBox tb in grid.Children.OfType
トムとCodeNakedはあなたがやりたいだろう与えたコードを、私はこれに対して、一般的にアドバイスをになります。このような何かがうまくいく
private void button1_Click(object sender, RoutedEventArgs e)
{
foreach (UIElement control in myGrid.Children)
{
if (control.GetType() == typeof(TextBox))
{
TextBox txtBox = (TextBox)control;
txtBox.Text = null;
}
}
}
+1私はあなたに完全に同意しますが、依然として質問に答えたい –
この問題には複数のアプローチがあります。
第1のアプローチは、データフローをバインドによってテキストボックスに表示し、ボタンをクリックしてデータを削除するハイブリッドアプローチです。あなたと一緒に起動するには
は、データクラスがINotifyPropertyChanged
を実装することを確認する必要があります。
public class Foo : INotifyPropertyChanged
{
private string bar;
private string baz;
public string Bar
{
get { return this.bar; }
set
{
this.bar = value;
// this is where the magic of bindings happens
this.OnPropertyChanged("Bar");
}
}
// rest of the class here...
}
:
<Grid>
<Grid.RowDefinitions>
<!-- ... -->
</Grid.RowDefinitions>
<TextBox Grid.Row="0"
Text="{Binding Bar}" />
<TextBox Grid.Row="1"
Text="{Binding Baz}" />
<!-- A more complete example would use Button.Command -->
<Button Grid.Row="2"
Content="CLEAR"
Click="ClearButton_Click" />
最後に、これらのバインディングはDataContext
を使って配線されており、 Window
コードビハインドのルーティングイベントハンドラ:
public Window1()
{
this.InitializeComponent();
// sets up the DataContext used by the bindings
this.Clear();
}
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
this.Clear();
}
private void Clear()
{
this.DataContext = new Foo();
}
このアプローチは、より複雑なUIを処理するためのより良い方向にあなたを押し進めます。
土壇場の努力は次のようになります。タイプを決定するために
/// <summary>This is a bad choice.</summary>
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
// assumes the Grid is named MyGrid
foreach (var textBox in this.MyGrid.Children.OfType<TextBox>())
{
textBox.Text = null;
}
}
- 1. WPF TextBoxテキスト複数のトリガー
- 2. WPF:単一のTextBoxを複数のデータソースにバインドする方法
- 3. すべてのCmake変数を一度にクリア
- 4. スタイルを使用してテキストをクリアするTextBoxトリガー
- 5. onClick複数のボタンを一度にマルチタッチ
- 6. 複数のPayPal取引を一度に
- 7. 複数のUITextViewを一度に選択
- 8. 一度に複数のフォルダをRobocopying
- 9. 複数のファイルを一度にアップロード
- 10. 複数のキーを一度にjq
- 11. 複数のシートを一度に削除
- 12. 複数のsetIntervalsを一度に
- 13. 一度に複数のMessageDialogを表示
- 14. jQuery複数のアクションを一度に
- 15. 複数のUILabelsを一度に隠す
- 16. 複数のコントロールを一度に表示
- 17. 一度に複数の図を表示
- 18. TextBoxのテキスト行数を取得する
- 19. 複数のセルをTextBox VBAにリンク
- 20. 複数のJTextFieldクリア
- 21. Laravel - 一度に複数のデータベース
- 22. カスタムTextBoxのイメージとテキストの重複を避けるには?
- 23. WPFコマンド実行時のTextBoxのクリア
- 24. TextBoxのテキストに強制値
- 25. RegEx複数のテキストの一致
- 26. TextBoxの固定テキスト
- 27. jQueryのアコーディオン - オープン複数のパネル一度
- 28. jQueryのslideToggle複数のdiv一度
- 29. 複数の行で1つのTextBox値をASP.NET内の別のTextBoxにコピー
- 30. 一度に複数の変数をプロンプトボックスに表示しよう
奇妙な方法。 'MyNamespace.TextBox'というタイプのものがあればどうなりますか? :-) – CodeNaked
あなたのコードがちょっと違いますが、最後のコメントは[CA1800](http://msdn.microsoft.com/en-us/library/ms182271.aspx)に従うことです。 – CodeNaked
これを行うより良い方法は、 'OfType' Linqメソッドを使うことです:' foreach(TextBox tb in myGrid.Children.OfType()){} '。あるいは、型を直接比較するのではなく、 'as'演算子を使用します。これは継承をサポートしているためです。' var controlAsTextBox = control as TextBox; if(controlAsTextBox!= null){} ' –