Potrzebuję, na przykład, sposobu na wyłączenie wszystkich przycisków w formularzu lub sprawdzenie wszystkich danych w polu tekstowym. Jakieś pomysły? Z góry dziękuję!Jak mogę uzyskać wszystkie elementy sterujące z formularza zawierającego kontrolki w dowolnym kontenerze?
5
A
Odpowiedz
22
Najprostszym rozwiązaniem może być kaskady:
public static void SetEnabled(Control control, bool enabled) {
control.Enabled = enabled;
foreach(Control child in control.Controls) {
SetEnabled(child, enabled);
}
}
lub tym podobne; można oczywiście przekazać delegata, aby to dość ogólna:
public static void ApplyAll(Control control, Action<Control> action) {
action(control);
foreach(Control child in control.Controls) {
ApplyAll(child, action);
}
}
potem takie rzeczy jak:
ApplyAll(this, c => c.Validate());
ApplyAll(this, c => {c.Enabled = false; });
3
Sponsorowane:
public List<Control> getControls(string what, Control where)
{
List<Control> controles = new List<Control>();
foreach (Control c in where.Controls)
{
if (c.GetType().Name == what)
{
controles.Add(c);
}
else if (c.Controls.Count > 0)
{
controles.AddRange(getControls(what, c));
}
}
return controles;
}
private void Form1_Load(object sender, EventArgs e)
{
var c = getControls("Button", this);
}
4
Wolę leniwe podejście (iterator) do problem, więc to jest to, czego używam:
/// <summary> Return all of the children in the hierarchy of the control. </summary>
/// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
/// <param name="control"> The control that serves as the root of the hierarchy. </param>
/// <param name="maxDepth"> (optional) The maximum number of levels to iterate. Zero would be no
/// controls, 1 would be just the children of the control, 2 would include the children of the
/// children. </param>
/// <returns>
/// An enumerator that allows foreach to be used to process iterate all children in this
/// hierarchy.
/// </returns>
public static IEnumerable<Control> IterateAllChildren(this Control control,
int maxDepth = int.MaxValue)
{
if (control == null)
throw new ArgumentNullException("control");
if (maxDepth == 0)
return new Control[0];
return IterateAllChildrenSafe(control, 1, maxDepth);
}
private static IEnumerable<Control> IterateAllChildrenSafe(Control rootControl,
int depth,
int maxDepth)
{
foreach (Control control in rootControl.Controls)
{
yield return control;
// only iterate children if we're not too far deep and if we
// actually have children
if (depth >= maxDepth || control.Controls.Count == 0)
continue;
var children = IterateAllChildrenSafe(control, depth + 1, maxDepth);
foreach (Control subChildControl in children)
{
yield return subChildControl;
}
}
}
0
Szukałem rozwiązania tego samego, aby włączyć/wyłączyć sterowanie oparte na typie, więc wymyśliłem podobne podejście do Luiscencio (możesz również zmodyfikować go, aby uzyskać wszystkie elementy sterujące lub zmienić inne właściwości).
public static void setEnabled (ControlCollection cntrList ,bool enabled,List<Type> typeList = null)
{
foreach (Control cntr in cntrList)
{
if (cntr.Controls.Count == 0)
if (typeList != null)
{
if (typeList.Contains(cntr.GetType()))
cntr.Enabled = enabled;
}
else
cntr.Enabled = enabled;
else
setEnabled(cntr.Controls, enabled, typeList);
}
}
public void loadFormEvents()
{
List<Type> list = new List<Type>();
list.Add(typeof(TextBox));
setEnabled(frm.Controls ,false,list);
}
Powiązane problemy
- 1. Jak kierować wszystkie elementy sterujące (style WPF)?
- 2. Jak wybrać wszystkie elementy formularza?
- 3. pobierz wszystkie elementy określonego formularza
- 4. Zawsze wyświetlaj elementy sterujące powiększeniem w MapView
- 5. Jak przechodzić przez wszystkie elementy formularza jQuery
- 6. Elementy sterujące narzędzia ToolStrip
- 7. Jak mogę uzyskać wszystkie elementy panelu w Java Swing?
- 8. WPF: Jak rozłożyć elementy sterujące w StackPanel?
- 9. Jak uzyskać wszystkie elementy pracy w iteracji?
- 10. Jak mogę uzyskać 0 przed dowolnym numerem?
- 11. Selen uzyskać wszystkie elementy w postaci
- 12. Wielokolumnowe elementy sterujące ComboBox dla WinForm
- 13. Jak mogę zarejestrować wszystkie żądania rozstrzygnięcia w kontenerze Autofac?
- 14. Elementy sterujące mapy witryn z https
- 15. Jak uzyskać wszystkie elementy listy według instancji?
- 16. Google Maps: jak przesunąć elementy sterujące powiększeniem?
- 17. Jak mogę wysłać zdarzenie "UIControlEventValueChanged" z kontrolki niestandardowej?
- 18. Czy można uzyskać dwa zachodzące na siebie elementy sterujące PictureBox z przezroczystymi obrazami?
- 19. Dlaczego elementy sterujące znajdują się w niewłaściwym miejscu, jeśli są ustawione podczas przewijania formularza?
- 20. Czy istnieje zdarzenie, gdy ładowane są elementy sterujące mapy google?
- 21. C# Licencja aplikacji Komponenty i elementy sterujące
- 22. Jak uzyskać wartość z kontrolki DatePicker UWP?
- 23. Wyłącz wszystkie kontrolki w div w asp.net
- 24. Użyj TinyInt, aby ukryć/pokazać elementy sterujące?
- 25. Jak mogę usunąć wszystkie elementy poza ostatnimi N z tablicy?
- 26. Zadokowane elementy sterujące umieszczone w TableLayout nie są automatycznie mniejsze niż rozmiar ich rozmiaru.
- 27. Ustaw wyświetlanie kontrolki użytkownika poza granicę formularza
- 28. Java 8 uzyskać wszystkie elementy na liście
- 29. Jak dodać elementy sterujące interfejsu Metro do zestawu narzędzi w visual studio?
- 30. Jak uzyskać wszystkie elementy określonego znacznika HTML w javascript?
Naprawdę nie odpowiada na pytanie tytułowe - jak uzyskać wszystkie elementy sterujące - nie można edytować ich właściwości. – n00dles
@ n00dles do cytowania z pytania: "Potrzebuję na przykład, aby wyłączyć wszystkie przyciski w formularzu" –
Po napisaniu komentarza, pomyślałem ... może to tytuł, który wymaga edycji. Byłem trochę zirytowany, ponieważ szukałem odpowiedzi na tytułowe pytanie. Zrobić to jednak. (Od jednego _Marc_ do innego!) – n00dles