none
Como puedo poner de inicio cuando creo una clase que el contro tenga Me.ForeColor = Color.Gray RRS feed

  • Pregunta

  • Buenas al crear el control modificado desde una clase como puedo hacer para predefinir el  Me.ForeColor = Color.Gray en la clase para cuando cree el control salga ya en gray

    Gracias

    lunes, 27 de enero de 2020 21:05

Respuestas

  • Vale, ya he conseguido hacerlo. No ha sido necesario hacer el overrides del ForeColor. Solo con el constructor ya funciona.

    En el constructor solamente hay que cambiar la propiedad, no hay que llamar al constructor base. Esto es diferente en VB que en C#, donde sí hay que llamarlo.

        Public Sub New()
            Me.ForeColor = Color.Gray
        End Sub

    Si compilas, y después arrastras este control sobre el form, te sale el ForeColor en Gray. Y si lo ejecutas se ve gris. Si después de eso cambias el color en el constructor del control heredado y vuelves al form, NO te cambia el ForeColor en la ventana de propiedades, porque el Form guarda salvado el ForeColor que tomó la primera vez. Si borras y vielves a añadir el control al Form, entonces vuelve a leer el valor predeterminado que esta vez se haya asignado al control.

    • Marcado como respuesta Diablo_Rojo miércoles, 29 de enero de 2020 17:46
    miércoles, 29 de enero de 2020 16:46

Todas las respuestas

  • Simplemente ponle Me.ForeColor=Color.Gray en el constructor (Sub New si es VB o nombre de la clase si es C#).
    lunes, 27 de enero de 2020 22:15
  • alberto gracias por responder

    pero no termino por entenderte

    Public Class TextBox_Numerico
        Inherits System.Windows.Forms.TextBox
        Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs)
            If e.KeyChar = "."c Then
                e.KeyChar = ","c
            End If
            'PERMITE TECLEAR TANTO , o . EN CUALQUIER POSICION MENOS EN LA POSICION 1
            If e.KeyChar = "."c Then e.KeyChar = ","
            If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> ","c Then
                ' Si no es un carácter de control, un número o una coma no es válido
                e.Handled = True
            ElseIf e.KeyChar = ","c AndAlso (Me.SelectionStart = 0 Or Me.Text.IndexOf(","c) >= 0) Then
                ' Si es una coma y es el primer carácter o existe otra no es válido
                e.Handled = True
            End If
            'PERMITE TECLEAR TANTO , o . EN CUALQUIER POSICION MENOS EN LA POSICION 1
            MyBase.OnKeyPress(e)
            Me.ForeColor = Color.Black
        End Sub
        Protected Overrides Sub OnTextChanged(e As EventArgs)
            If Me.Text = Me.Tag Then
                Me.ForeColor = Color.Gray
            End If
            MyBase.OnTextChanged(e)
        End Sub
        Protected Overrides Sub OnLostFocus(e As EventArgs)
            If Me.Text = "" Then ' Or Me.Text = Me.Tag Then
                Me.Text = Me.Tag
            End If
            MyBase.OnLostFocus(e)
        End Sub
    End Class
    

    martes, 28 de enero de 2020 15:30
  • Estoy escribiendo este codigo pero no funciona

     Public Sub New()
            MyBase.New()
            Me.ForeColor = Color.Gray
        End Sub

    martes, 28 de enero de 2020 15:52
  • El código que has escrito está bien. Eso hace que la propiedad ForeColor cambie a Color.Gray. Debe haber algo en el comportamiento interno de la clase madre que haga que no lo interprete correctamente.

    Lo he probado, y funciona bien si lo pones en un "Overrides":

        Protected Overrides Sub OnEnter(e As EventArgs)
            Me.ForeColor = Color.Blue
        End Sub
    

    martes, 28 de enero de 2020 17:04
  • Yo no quiero cuando enter si no que cuando yo cree un textbox ya este el ferecolor en gray

    no se si me explico bien

    martes, 28 de enero de 2020 17:52
  • Como tu me dices me deja en texto en negro
    martes, 28 de enero de 2020 19:22
  • Mientras no entres, el textbox está vacío. Entonces no se ve el ForeColor. Solo se ve el color cuando tecleas algo en el textbox, lo cual requiere entrar en el mismo. Así que si le asignas el color en el enter funciona igual que si se lo asignas al crearlo.

    Si lo creas con texto en lugar de crearlo vacío, entonces puedes ponerle el color a la vez que le asignas el texto.

    martes, 28 de enero de 2020 19:23
  • Lo que tu me has puesto funciona al entrar

    lo que yo quiero es que la propiedad del textbox en vez se a black al crear el textbox 

    pues que sea de color gray, para no tener que cambiarlo yo cada vez que cree un textbox

    dame una pista de donde tengo que hacerlo

    Gracias por la ayuda

    martes, 28 de enero de 2020 19:29
  • lo que yo quiero es que la propiedad del textbox en vez se a black al crear el textbox 

    ¿Por qué? ¿Qué más te da el color que tenga al crearlo, si NO SE VE?

    Solo se ve el ForeColor cuando el Textbox tiene texto. Y para que tenga texto, tiene que llegarle ese texto de una de dos formas: O bien porque se lo asignas al .Text o bien porque el usuario entra y lo teclea.

    Entonces, si le cambias el color en el Set de Text (recuerda que es Overridable) y también se lo cambias en el Enter, entonces siempre se ve de ese color aunque no lo tenga en el momento de la creación.

    martes, 28 de enero de 2020 20:14
  • Lo siento Alberto a ver si así esta mas explicado yo quiero programarlo para que cuando creo el componente del textbox en las propiedades en vez aparecer lo que se ve en la foto en el forecolor aparezca gray 

    martes, 28 de enero de 2020 20:58
  • Lo siento Alberto a ver si así esta mas explicado yo quiero programarlo para que cuando creo el componente del textbox en las propiedades en vez aparecer lo que se ve en la foto en el forecolor aparezca gray 

    Ah, vale. No quieres que se vea gris al ejecutarlo, lo que quieres es que aparezca en el diseñador.

    Se me ocurre que podrías poner un Overrides de la propiedad ForeColor heredada de Textbox, aprovechando que es Overridable, y dentro de tu overrides la inicializas con el valor que quieras.

    miércoles, 29 de enero de 2020 6:55
  • Gracias Alberto 

    Que tengo que buscar para lo que dices por qué ayer estuve todo el día y no encontré nada para cambiar las propiedades en diseño

    Gracias

    miércoles, 29 de enero de 2020 7:10
  • Vale, ya he conseguido hacerlo. No ha sido necesario hacer el overrides del ForeColor. Solo con el constructor ya funciona.

    En el constructor solamente hay que cambiar la propiedad, no hay que llamar al constructor base. Esto es diferente en VB que en C#, donde sí hay que llamarlo.

        Public Sub New()
            Me.ForeColor = Color.Gray
        End Sub

    Si compilas, y después arrastras este control sobre el form, te sale el ForeColor en Gray. Y si lo ejecutas se ve gris. Si después de eso cambias el color en el constructor del control heredado y vuelves al form, NO te cambia el ForeColor en la ventana de propiedades, porque el Form guarda salvado el ForeColor que tomó la primera vez. Si borras y vielves a añadir el control al Form, entonces vuelve a leer el valor predeterminado que esta vez se haya asignado al control.

    • Marcado como respuesta Diablo_Rojo miércoles, 29 de enero de 2020 17:46
    miércoles, 29 de enero de 2020 16:46
  • Gracias Alberto eso ya lo probe, lo que hacia era agregar un componente nuevo creia que me modificaria los que tenia un fallo mio

    pero 1000 gracias

    he estado probando esto, pero me quedo con el tuyo que es mas corto

    Private _ForeColor As System.Drawing.Color = Color.Green 'Green will be default value
    
        Public Overrides Property ForeColor() As System.Drawing.Color
            Get
                Return _ForeColor
            End Get
            Set(ByVal value As System.Drawing.Color)
                _ForeColor = value
                MyBase.ForeColor = value
            End Set
        End Property

    miércoles, 29 de enero de 2020 17:33