Bạn sẽ cần phải sử dụng đệ quy. Sau đây là một giải pháp C# sử dụng một phương pháp mở rộng và đi xa hơn một chút so với phạm vi của câu hỏi của bạn nhưng tôi chỉ cần kéo nó từ khuôn khổ của chúng tôi.
static partial class ControlExtensions
{
public static void ApplyToMatchingChild(this Control parent, Action<Control> actionToApplyWhenFound, bool keepApplyingForever, params Func<Control, bool>[] matchingChildCriteria)
{
ControlEventHandler reapplyEventHandler = null;
if (keepApplyingForever)
{
reapplyEventHandler = (s, e) =>
{
ApplyToMatchingChild(e.Control, actionToApplyWhenFound, keepApplyingForever, matchingChildCriteria);
};
}
SearchForMatchingChildTypes(parent, actionToApplyWhenFound, reapplyEventHandler, matchingChildCriteria);
}
private static void SearchForMatchingChildTypes(Control control, Action<Control> actionToApplyWhenFound, ControlEventHandler reapplyEventHandler, params Func<Control, bool>[] matchingChildCriteria)
{
if (matchingChildCriteria.Any(criteria => criteria(control)))
{
actionToApplyWhenFound(control);
}
if (reapplyEventHandler != null)
{
control.ControlAdded += reapplyEventHandler;
}
if (control.HasChildren)
{
foreach (var ctl in control.Controls.Cast<Control>())
{
SearchForMatchingChildTypes(ctl, actionToApplyWhenFound, reapplyEventHandler, matchingChildCriteria);
}
}
}
}
Và để gọi:
myControl.ApplyToMatchingChild(c => { /* Do Stuff to c */ return; }, false, c => c is TextBox);
Điều đó sẽ áp dụng một chức năng để tất cả các textbox đứa trẻ. Bạn có thể sử dụng tham số keepApplyingForever
để đảm bảo rằng chức năng của bạn sẽ được áp dụng khi các điều khiển con sau này được thêm vào. Hàm này cũng sẽ cho phép bạn chỉ định bất kỳ số lượng tiêu chí phù hợp nào, ví dụ, nếu điều khiển cũng là nhãn hoặc một số tiêu chí khác.
Chúng tôi thực sự sử dụng điều này như một cách gọn gàng để gọi vùng chứa tiêm phụ thuộc của chúng tôi cho mỗi UserControl được thêm vào Biểu mẫu của chúng tôi.
Tôi chắc chắn bạn cũng không nên gặp phải nhiều vấn đề. converting it to VB.NET cũng vậy ... Ngoài ra, nếu bạn không muốn chức năng "keepApplyingForever", bạn cũng nên dễ dàng tách nó ra.
Có thể trùng lặp [Làm cách nào để có được TẤT CẢ các điều khiển con của biểu mẫu Windows Biểu mẫu của một loại cụ thể (Button/Textbox)?] (Https://stackoverflow.com/questions/3419159/how-to-get -nút-con-điều khiển-of-a-windows-form-form-of-a-cụ thể-loại-nút) – PulseJet