vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Rahmenfarbe für Alle TextBoxen und Labels 
Autor: spatzimatzi
Datum: 17.12.18 18:31

Hallo,
brauche Eure Hilfe für ein Problem.

Wie der Titel schon sagt, soll der Rahmen von TextBoxen unterschiedliche Farben annehmen.
Da dies nicht durch Anpassen von Eigenschaften möglich ist, muss ich dies selber zeichnen.
Und hier brauche ich Hilfe.

Folgende Situation liegt vor:
Habe viele Forms mit den entsprechenden Objekten.
Beim Laden der Form rufe ich eine Routine auf, die alle Objekte der Form nach meinen Regeln anpasst. Dabei werden aber nur die möglichen Eigenschaften angepasst. Nicht nur das Aussehen ist dann immer gleich, sondern es wird auch gesteuert, ob der Anwender in den TextBoxen Änderungen vornehmen kann.
Dies funktioniert nach meinen Vorstellung sehr gut.
Jetzt möchte ich aber auch die Rahmenfarbe anpassen. Dabei sollen bestimmten TextBoxen auch entsprechende Rahmenfarben zugewiesen bekommen.
Wenn ich die Zuweisung der Farben jetzt direkt in dieser Routine durchführe, dann wird der Rahmen gesetzt, aber wieder überschrieben.

Meine Frage:
Wie muss ich vorgehen, damit die Farbanpassung nicht nachträglich vom System geändert werden.

Hoffe, ich habe die Situation vernünftig beschrieben.
Bei Fragen stehe ich natürlich jederzeit zur Verfügung.

Vielen Dank für Eure Unterstützung
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rahmenfarbe für Alle TextBoxen und Labels 
Autor: Manfred X
Datum: 18.12.18 09:48

Hallo!

Windows.Forms?

Du könntest jede Textbox jeweils auf einem Panel platzieren,
das in alle Rchtungen 1 bis 2 Pixel größer als die Abmessung
der Box ist und die Hintergrundfarbe des Panel setzen.

Public Class frmFrameDemo
 
    Dim pl As New Panel With {.Parent = Me,
    .Top = 50, .Left = 100, .BorderStyle = BorderStyle.None, .BackColor = _
      Color.Red}
 
    Dim txt As New TextBox With {.Parent = pl, .Multiline = True,
    .Width = 200, .Height = 200, .BorderStyle = BorderStyle.None}
 
 
    Private Sub frmTest3_Load(sender As Object, e As EventArgs) Handles _
      MyBase.Load
 
        Dim framewidth As Integer = 2 'Rahmenbreite
 
        'Positionierung und Größenanpassung der Controls 
        pl.Width = txt.Width + framewidth * 2
        pl.Height = txt.Height + framewidth * 2
        txt.Left = framewidth : txt.Top = framewidth
    End Sub
 
 
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rahmenfarbe für Alle TextBoxen und Labels 
Autor: spatzimatzi
Datum: 18.12.18 10:52

Hallo ManfredX,
die jeweiligen TextBoxen mit einem Panel zu hinterlegen geht leider nicht mehr, da die Forms bereits fertig sind. Und es ist ein grundsätzliches Problem in den vielen Forms. Die Idee, die Rahmen einzufärben, ist mir auch erst jetzt gekommen.
Da das Ändern der Rahmenfarbe grundsätzlich klappt und nur vom System überschrieben wird, stellt sich die Frage, wie kann ich dieses Überschreiben unterbinden. Oder es stellt sich die Frage, ob das Anpassen der Rahmenfarbe in einem anderen Ereignis stattfinden muss.

Vielen Dank
spatzimatz
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rahmenfarbe für Alle TextBoxen und Labels 
Autor: Manfred X
Datum: 18.12.18 11:17

Ich weiß nicht, ob es in Deinen "bereits fertigen Formularen"
einfacher ist, im Paint-Event der Formulare einen Rahmen auf
die Form um die rahmenlosen Textboxen zu zeichnen.

Hier ein Beispiel für beide Versionen:

Public Class frmFrameDemo
 
    Dim pl As New Panel With {.Parent = Me,
    .Top = 50, .Left = 100, 
    .BorderStyle = BorderStyle.None, .BackColor = Color.Red}
 
    Dim txt As New TextBox With {.Parent = pl, .Multiline = True,
    .Width = 200, .Height = 200, .BorderStyle = BorderStyle.None}
 
 
    Dim txt2 As New TextBox With {.Parent = Me, .Top = 300,
    .Left = 100, .Width = 200, .Height = 150,
    .Multiline = True, .BorderStyle = BorderStyle.None}
 
 
    Private Sub frm_Load(sender As Object, 
                         e As EventArgs) Handles MyBase.Load
 
        Dim framewidth As Integer = 1 'Rahmenbreite
 
        'Positionierung und Größenanpassung der Controls 
        pl.Width = txt.Width + framewidth * 2
        pl.Height = txt.Height + framewidth * 2
        txt.Left = framewidth : txt.Top = framewidth
 
    End Sub
 
 
    Private Sub frm_Paint(sender As Object, 
                          e As PaintEventArgs) Handles Me.Paint
 
        'Rahmen um die Textbox auf das Formular zeichnen
 
        Dim framewidth As Integer = 1
 
        Using pn As New Pen(Color.Red, framewidth)
            Dim rect As New Rectangle(txt2.Left - framewidth,
                                      txt2.Top - framewidth,
                                      txt2.Width + 2 * framewidth,
                                      txt2.Height + 2 * framewidth)
 
            e.Graphics.DrawRectangle(pn, rect)
        End Using
 
    End Sub
End Class


Beitrag wurde zuletzt am 18.12.18 um 11:19:52 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rahmenfarbe für Alle TextBoxen und Labels 
Autor: spatzimatzi
Datum: 19.12.18 14:45

Hallo Manfred x,
konnte mich erst jetzt mit dem Problem befassen.
Die Variante mit den Textboxen auf den Panels habe ich nicht getestet, weil bei mir nicht durchführbar. Trotzdem ein Dankeschön für das Beispiel.

Nun zu dem Vorgehen in Deinem Beispiel:
In meinen Anwendungs-Forms muss ich in Me.Paint in einer Schleife alle TextBoxen lesen und die Rahmenfarbe anpassen. In einer Test-Form hat das auch grundsätzlich funktioniert. Auch bei der Ermittlung der Controls.
Gehe ich jedoch in eine Anwendungs-Form, dann reagiert Paint nicht oder verspätet und es werden auch nicht alle Controls ermittelt.
Woran das liegt? Keine Ahnung!
Werde mich wohl in kleinen Schritten herantasten müssen. Deshalb möchte ich Dich bitten, meine Subs zum Lesen der Controls anzuschauen.

Ziel ist es, alle Controls zu lesen. Liegt ein Container vor, dann soll rekursiv gelesen werden.
Syntax in Me.Paint

subLoopCtrl(Me)
Sub subLoopCtrl(ByVal Ctrl As Control)
  For Each myCtrl As Control In Ctrl.Controls
 
    If myCtrl.Controls.Count > 1 Then
      subSetControlStyle(myCtrl)  
      subLoopCtrl(myCtrl)
    Else
      subSetControlStyle(myCtrl)
    End If
 
  Next
End Sub
Sub subSetControlStyle(ByVal ctrl As Control)
 
  Select Case TypeName(ctrl)
      Case "TextBox"  ', Andere Typen später
 
        ... Setzen der Rahmenfarbe
 
  End Select
End Sub
Diese Routinen sollen alle Controls ausgeben. Selektion findet später statt.
Wenn das Lesen der Controls richtig verläuft, dann bin ich einen Schritt weiter.

Danke
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rahmenfarbe für Alle TextBoxen und Labels 
Autor: Manfred X
Datum: 19.12.18 20:03

Es besteht die Möglichkeit, durch eine rekursive
Methode alle Controls im Paint-Event zu durchlaufen
und die erforderlichen Rahmen darum zu zeichnen.
Das setzt aber - wie erwähnt - voraus, daß die Container
einen Überhang bieten, auf dem ein Rechteck gezeichnet werden
kann.

Ich bezweifle aber, daß diese Technik zweckmäßig ist.
Vermutlich lassen sich die Controls in geeignete Gruppen
zusammenfassen.
Jeweils in einer generischen Dictionary oder einer Liste (List of Control)
könnten Referenzen für alle Controls mit einer gemeinsamen "Rahmen"-Logik
zusammengefaßt werden. Im Paint-Event werden diese Listen durchlaufen
und die Rahmen gezeichnet (z.B. auf der jeweiligen Parent-Oberfläche).

Für genauere Hinweise sind aber detaillierte Angaben zum Aufbau und zur
Funktionalität der Formulare erforderlich.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel