2012-01-18 3 views
5

Używam ekspresowych VB 2008, ale prawdopodobnie dotyczy to wszystkich środowisk .net.Zarządzanie etykietami w .net

Moje pytanie dotyczy etykiet, które nie robią nic. Brak wydarzeń, a ich tekst nigdy się nie zmienia. Po prostu siedzą tam nad polami tekstowymi i innymi gadżetami, dzięki czemu użytkownik wie, do czego służy każdy doohickey. To cała ich praca. Prosty. Bez żadnego kodu. (Inne niż kod napisany przez projektanta formularzy.)

Mój problem jest tak cholernie WIELU z nich! Moja aplikacja ma wiele kart w tej samej formie, a każda karta ma wiele obiektów i każda ma przypisaną etykietę. Ponieważ nigdy nie zawracałem sobie głowy ich nazwaniem, teraz mam etykietę o nazwie Label224. Zgadza się, 224 etykiety! Robi się niedorzecznie. Kiedy przeglądam okno właściwości, czasami chcę wybrać obiekt według nazwy za pomocą menu rozwijanego i wymuszają one przewijanie.

PYTANIE: Czy istnieje sposób na zmniejszenie irytującej liczby nienazwanych etykiet (lub dowolnego rodzaju obiektu, do którego nie ma odniesienia w kodzie), które są mniej irytujące podczas programowania?

Mogę załadować je oczywiście kod. Byłoby dobrze, ale miło jest je przedstawić graficznie bez prób i błędów związanych z uruchomieniem kodu, aby sprawdzić, czy pozycja jest właściwa.

Odpowiedz

4

Kilka rzeczy.

Set Każda etykieta jest nieruchomość GenerateMember false:

label1.GenerateMember = False 

To zapobiegnie pojawianiu Etykieta w widoku Kod kombi pudełek i intellisense.

Poza tym po prostu masz za dużo kontroli.

Wspomniałeś o "zakładkach", w takim przypadku możesz spróbować przenieść każdą kartę rzeczy do osobnego kontrolka użytkownika, a następnie ładujesz tylko jedną kontrolę użytkownika dla każdej karty. Nie zmniejsza liczby kontrolek, ale sprawia, że ​​jest to trochę łatwiejsze w zarządzaniu.

Drugim "zadaniem" etykiety jest zapewnienie mnemonicznej aktywacji sterowania dla następnej kontrolki w kolejności tabulacji. Jeśli tego nie używasz, możesz spróbować "oszukiwać" i pozbyć się wszystkich etykiet, a następnie "pomalować" etykietę obok każdego elementu sterującego w zdarzeniu dotyczącym farby w pojemniku. Możesz umieścić wyświetlanie etykiety we właściwości znacznika kontrolki i pomalować ją. Niekoniecznie największa sugestia.

Przykład:

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint 
    For Each c As Control In Me.Controls 
    If c.Tag IsNot Nothing Then 
     TextRenderer.DrawText(e.Graphics, c.Tag.ToString, Me.Font, _ 
          New Rectangle(c.Left - 100, c.Top, 100, c.Height), _ 
          Color.Black, Color.Empty, TextFormatFlags.VerticalCenter) 
    End If 
    Next 
End Sub 
+0

GenerateMember to moja odpowiedź. Wierz mi lub nie, nie miałem pojęcia, co to oznacza. Dziękuję, ponieważ to teraz prowadzi mnie do poznania również właściwości Modyfikatorów. Jestem samoukiem w .NET (pochodzę z VB6) i każdego dnia uczę się więcej. – PaulOTron2000

3

Jeśli masz dużo formantów TextBox z sąsiednimi Etykiety, można utworzyć usercontrol który składa się zarówno z TextBox oraz Label. Możesz dodać dowolne właściwości, aby dostosować wygląd.

enter image description here

To jest taki wspólny wzór UI, naprawdę myślę VS powinny pochodzić z kontrolą takiego.

Oznacza to również, że można szybciej tworzyć nowe formularze, ponieważ do każdego pola edycyjnego wystarczy jedna kontrola, a nie dwie.

Oto kolejny przykład usercontrol mam - to tylko dwie etykiety, ale zasada jest ta sama:

enter image description here

Tutaj jest on używany kilka razy na jednej postaci:

enter image description here

Zamiast 18 etykiet w formularzu, mam 9 wystąpień z mojej kontroli użytkownika.

+0

Przypominam sobie, że LOOOOONG dawno temu wczesna wersja MS Access pozwoliłaby programistce kojarzyć etykiety z ramkami tekstowymi w takiej formie, z etykietą domyślną na nazwę pola bazy danych, z którym związany był textbox. Wiele informacji na temat programu Access było mniej niż pożądane, ale ta funkcja miała sens. – PaulOTron2000

+0

Mam przeczucie, że VB mogło mieć to samo. Ale nie używałem VB przez 15 lat lub dłużej, więc mogłem sobie to wyobrazić. –

+0

Nie, chyba że był w VB1. Pominąłem VB1, ale użyłem każdej wersji od VB2 do VB6. (Zaczynając od GW Basic, potem na QuickBasic, który był imponujący w swoim czasie.) Och, mój stary, jestem stary! I myślę, że możesz powiedzieć, że jestem dość prosty. – PaulOTron2000