Winforms アプリケーションでのテキストボックスのループ
Winforms アプリケーションでは、テキストボックスのコレクションを反復処理する必要がある状況が発生することがあります。画面上で。これらの各テキスト ボックスには、次のように連続番号を付けることができます。
DateTextBox0 DateTextBox1 ... DateTextBox37
これらのテキスト ボックスに値を割り当てるには、次のアプローチを検討できます。
int month = MonthYearPicker.Value.Month; int year = MonthYearPicker.Value.Year; int numberOfDays = DateTime.DaysInMonth(year, month); m_MonthStartDate = new DateTime(year, month, 1); m_MonthEndDate = new DateTime(year, month, numberOfDays); DayOfWeek monthStartDayOfWeek = m_MonthStartDate.DayOfWeek; int daysOffset = Math.Abs(DayOfWeek.Sunday - monthStartDayOfWeek); for (int i = 0; i <= (numberOfDays - 1); i++) { // Here is where you want to loop through the textboxes and assign values based on the 'i' value // DateTextBox(daysOffset + i) = m_MonthStartDate.AddDays(i).Day.ToString(); }
ただし、アプリケーションではこれらのテキストボックスは別のパネルに配置されるため、さらに複雑さが増します。これらのコントロールを効果的にループするには、拡張メソッドを利用できます。
public static IEnumerable<TControl> GetChildControls<TControl>(this Control control) where TControl : Control { var children = (control.Controls != null) ? control.Controls.OfType<TControl>() : Enumerable.Empty<TControl>(); return children.SelectMany(c => GetChildControls<TControl>(c)).Concat(children); }
この拡張メソッドを使用すると、指定したタイプのすべてのコントロールとサブコントロールを再帰的に取得できます。使用例:
var allTextBoxes = this.GetChildControls<TextBox>(); foreach (TextBox tb in allTextBoxes) { tb.Text = ...; }
この拡張メソッドを使用すると、個別のパネル上のすべてのテキストボックスを効率的にループし、目的のロジックに従って値を割り当てることができます。
以上がWinForms アプリケーションの複数のパネル上のテキストボックスを効率的にループするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。