none
Backcolor...enable.. RRS feed

  • Frage

  • Hallo,

    für meine Textboxen möchte ich eine andere Hintergrundfarbe setzen, wenn das Control
    den Focus erhält und natprlich wieder auf den Standardzurücksetzen wenn der Focus wechselt.
    Das klappt auch wunderbar mit :

    Private Sub concept_Textbox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus
         If Me.DesignMode Then
            Else
    Me.BackColor = Color.Yellow
         endif
    endsub

    und

    Private Sub conceptTextbox_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Leave
            If Me.DesignMode Then
            Else
                Me.BackColor = SystemColors.Window
            End If
        End Sub

    Problem ist, wenn der Focus genau dieses Control ist und es jetzt mit Enable=false gesetzt wird,
    so wird das Control nicht  ausgegraut und bleibt mit der Hintergrundfarbe SystemColor.Window
    ( in diesem Fall weiss ) stehen...

    Schätze mal das das Enable Property nach dem Leave gesetzt wird und daher die Farbe wieder
    wechselt... jemand eine eine Idee wie ich das umgehen kann?

    Danke,
    Mario

     

    Mittwoch, 24. August 2011 07:58

Antworten

  • Hallo Mario,

    zunächst wäre es sinnvoller, das gleiche Ereignispaar zu verwenden,
    d. h. entweder Enter / Leave oder aber GotFocus /LostFocus.

    Wobei ein Ändern der Enabled Eigenschaft während der Eingabe eigentlich nicht passieren
    sollte, siehe Vorsicht bei GotFocus.
    Was indirekt für Enabled gilt, da dadurch der Fokus auf das nächste Steuerelement wechselt.

    Eine mögliche Lösung wäre EnabledChanged zu überwachen.
    Ein einfaches Beispiel  - wobei ich dabei die On...-Methoden verwendet habe:

    Imports System.Drawing
    
    Public Class TextBoxEx
      Inherits System.Windows.Forms.TextBox
    
      Protected Overrides Sub OnGotFocus(e As EventArgs)
        MyBase.OnGotFocus(e)
        ChangeBackColor()
      End Sub
    
      Protected Overrides Sub OnLostFocus(e As EventArgs)
        MyBase.OnLostFocus(e)
        ChangeBackColor()
      End Sub
    
      Protected Overrides Sub OnEnabledChanged(e As EventArgs)
        MyBase.OnEnabledChanged(e)
        ChangeBackColor()
      End Sub
    
      Protected Overrides Sub OnReadOnlyChanged(e As EventArgs)
        MyBase.OnReadOnlyChanged(e)
        ChangeBackColor()
      End Sub
    
      Protected Sub ChangeBackColor()
        If Not MyBase.DesignMode Then
          If Not MyBase.ReadOnly AndAlso MyBase.Enabled Then
            If MyBase.Focused Then
              MyBase.BackColor = Color.LightYellow
            Else
              Me.BackColor = SystemColors.Window
            End If
          Else
            Me.BackColor = SystemColors.Control
          End If
        End If
      End Sub
    
    End Class
    

    Gruß Elmar

    Donnerstag, 25. August 2011 08:49

Alle Antworten

  • Hallo Mario,

    zunächst wäre es sinnvoller, das gleiche Ereignispaar zu verwenden,
    d. h. entweder Enter / Leave oder aber GotFocus /LostFocus.

    Wobei ein Ändern der Enabled Eigenschaft während der Eingabe eigentlich nicht passieren
    sollte, siehe Vorsicht bei GotFocus.
    Was indirekt für Enabled gilt, da dadurch der Fokus auf das nächste Steuerelement wechselt.

    Eine mögliche Lösung wäre EnabledChanged zu überwachen.
    Ein einfaches Beispiel  - wobei ich dabei die On...-Methoden verwendet habe:

    Imports System.Drawing
    
    Public Class TextBoxEx
      Inherits System.Windows.Forms.TextBox
    
      Protected Overrides Sub OnGotFocus(e As EventArgs)
        MyBase.OnGotFocus(e)
        ChangeBackColor()
      End Sub
    
      Protected Overrides Sub OnLostFocus(e As EventArgs)
        MyBase.OnLostFocus(e)
        ChangeBackColor()
      End Sub
    
      Protected Overrides Sub OnEnabledChanged(e As EventArgs)
        MyBase.OnEnabledChanged(e)
        ChangeBackColor()
      End Sub
    
      Protected Overrides Sub OnReadOnlyChanged(e As EventArgs)
        MyBase.OnReadOnlyChanged(e)
        ChangeBackColor()
      End Sub
    
      Protected Sub ChangeBackColor()
        If Not MyBase.DesignMode Then
          If Not MyBase.ReadOnly AndAlso MyBase.Enabled Then
            If MyBase.Focused Then
              MyBase.BackColor = Color.LightYellow
            Else
              Me.BackColor = SystemColors.Window
            End If
          Else
            Me.BackColor = SystemColors.Control
          End If
        End If
      End Sub
    
    End Class
    

    Gruß Elmar

    Donnerstag, 25. August 2011 08:49
  • Hallo Elmar,

     

    super ! vielen lieben Dank... jetzt läuft es so wie ich es mir vorgestellt habe... dachte nur das wenn ich die Hintergrundfarbe auf den Standard mit SystemColors.Window wieder zurückstelle das auch das ausgegraute automatisch gesetzt wird bei Enable = false ...

    bye,

    Mario

     

    Freitag, 26. August 2011 09:17