Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Mac70

[VB] Zmiana właściwości wielu elementów naraz

Polecane posty

Witam, jak już widać w temacie, chcę zmienić wiele elementów (w tym przypadku akurat kolor tła przycisków). Wszystkie przyciski w programie mają nazwy "Button1", "Button2", "Button3" itd., a moim celem jest zamiana koloru tła ich wszystkich ORAZ przyszłych o podobnych nazwach (lub chociaż z dodanym jakimś elementem który by ułatwiał panowanie nad tym).

Czy jest to możliwe?

Wpisywanie każdego przycisku ręcznie ze względu na ich dużą ilość oraz fakt, że podobną rzecz chcę wykorzystać na większą skalę z innymi elementami niż przyciski jest zbyt problematyczne.

W razie potrzeby mogę dać link do wersji beta programu.

PS: Przyciski te znajdują się zarówno bezpośrednio w Form, jak i w kilku tabach.

Korzystam z Visual Basic Express 2010.

Link do komentarza
Udostępnij na innych stronach

Widzę dwie możliwości:

- użycie globalnej wartości,

- użycie kolekcji.

Rozwiązanie pierwsze zakłada, że wszystkie guziki mają wspólną, globalną, zmienną opisującą kolor. Co pewnie jest niemożliwe do osiągnięcia.

Drugie rozwiązanie wymaga utworzenia kolekcji obiektów. Taka kolekcja pozwala wykonać działanie na wszystkich obiektach w niej zawartych. Dobór właściwej struktury dla kolekcji jest uzależniony od konkretnej sytuacji. Sądzę, że tablica/wektor lub lista pasują najlepiej do tej sytuacji.

Link do komentarza
Udostępnij na innych stronach

Piszesz w Windows Forms? Każda kontrolka ma właściwość Controls, która jest właśnie kolekcją wszystkich kontrolek osadzonych na danej kontrolce.

Możesz zrobić na formie metodę (kod w C#, przepiszesz sobie na VB):

private IEnumerable<Control> GetAllControls(ControlCollection controls)
{
foreach (Control control in controls)
{
yield return control;
foreach (Control innerControl in AllControls(control.Controls))
yield return innerControl;
}
}

Jak widać, w metodzie jest rekurencja, dzięki czemu dostajemy pełną kolekcję kontrolek. Jeśli wiesz, że np. przyciski są tylko na formie, a nie na kontrolkach wewnątrz formy, to możesz zrezygnować z takiej zabawy. Jako parametr metody możesz przekazać kolekcję Controls z formy, natomiast przyciski możesz wyciągnąć tak:

private IEnumerable<Button> GetButtonControls()
{
foreach (var buttonControl in AllControls(Page.Controls).OfType<Button>())
yield return ButtonControl;
}

Link do komentarza
Udostępnij na innych stronach

Dziękuję, jeszcze mam dwa inne pytania:

1. Czy jest możliwe sprawdzenie, czy dana strona działa i wyświetlenie w TextBoxie komunikatu, jeśli nie? W normalnych warunkach generuje to błąd (mam napisany kod na sprawdzanie wersji programu sprawdzający pojedynczą cyfrę umieszczoną na darmowym hostingu, ale jako że hosting nie jest zbyt stabilny wolę się w ten sposób zabezpieczyć)

2. Jest jakiś sposób na przeprowadzenie aktualizacji programu z pominięciem serwera? Jeśli nie, czy jakiś darmowy hosting jest w stanie to obsłużyć?

Dodatek do drugiego punktu - myślałem nad napisaniem dodatkowego programu aktualizującego główny program, tylko czy w takim przypadku możliwe jest zachowanie ustawień poprzedniej wersji przy równoczesnym dodaniu nowych obecnych w kolejnej wersji?

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...