首頁 > 後端開發 > C++ > 如何在 WinForms 應用程式中有效地循環存取多個面板上的文字方塊?

如何在 WinForms 應用程式中有效地循環存取多個面板上的文字方塊?

Barbara Streisand
發布: 2025-01-07 13:52:40
原創
936 人瀏覽過

How Can I Efficiently Loop Through TextBoxes on Multiple Panels in a WinForms Application?

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板