none
User Control RRS feed

  • Pregunta

  • Hola a todos,

    estoy creandome un user control, que no es más que un textbox con un errorprovider.El problema lo tengo con las propiedades que me salen cuando importo el control, yo quiero que solo me aparezcan las propiedades del textbox, y no las del "contenedor", por cuando cambio la font me crece la zona gris pero no lo hace el textbox.

    ¿Alguien puede orientarme?

    Gracias.


    Un saludo, Dani.
    lunes, 22 de noviembre de 2010 13:25

Respuestas

  • Lo probé y me funciono. 

     

    Public Class texto
     Inherits System.Windows.Forms.TextBox
     Friend WithEvents ErrorProvider1 As System.Windows.Forms.ErrorProvider
     Public Sub New()
      Me.ErrorProvider1 = New ErrorProvider()
      Me.ErrorProvider1.ContainerControl = Me.Parent
      CType(Me.ErrorProvider1, System.ComponentModel.ISupportInitialize).BeginInit()
      Me.ErrorProvider1 = New System.Windows.Forms.ErrorProvider()
      Me.ErrorProvider1.SetIconAlignment(Me, ErrorIconAlignment.MiddleRight)
      Me.ErrorProvider1.SetIconPadding(Me, 2)
      Me.ErrorProvider1.BlinkRate = 1000
      Me.ErrorProvider1.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.AlwaysBlink
     End Sub
    
     Private Sub texto_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Validated
      If Me.Text = String.Empty Then
       ErrorProvider1.SetError(Me, "No puede estar vacío")
      End If
     End Sub
    End Class
    
    
    Espero te sirva, saludos.

     


    Jackson Rosado Developer c#, VFP, PL/SQL DBA - Oracle 10g
    • Marcado como respuesta danielovik jueves, 25 de noviembre de 2010 9:58
    martes, 23 de noviembre de 2010 20:52

Todas las respuestas

  • Puedes poner el código o subirlo a algun sitio para comprobarlo?
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    lunes, 22 de noviembre de 2010 13:26
    Moderador
  • Si, claro. Aquí esta el Designer.

    Partial Class TextBoxOper
      Inherits System.Windows.Forms.UserControl
      Enum _formas
        Numerico
        Decimales
        Texto
        Normal
      End Enum
      Dim _tipo As _formas = _formas.Normal 'Por defecto es un textbox normal
      Dim _obligatorio As Boolean = False 'Por defecto no es un campo obligatorio
      Dim _signo As Boolean = False 'En caso de ser numerico signo del numero
    
      'UserControl1 reemplaza a Dispose para limpiar la lista de componentes.
      <System.Diagnostics.DebuggerNonUserCode()> _
      Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
          If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
          End If
        Finally
          MyBase.Dispose(disposing)
        End Try
      End Sub
    
      'Requerido por el Diseñador de Windows Forms
      Private components As System.ComponentModel.IContainer
    
      'NOTA: el Diseñador de Windows Forms necesita el siguiente procedimiento
      'Se puede modificar usando el Diseñador de Windows Forms. 
      'No lo modifique con el editor de código.
      <System.Diagnostics.DebuggerStepThrough()> _
      Private Sub InitializeComponent()
        Me.components = New System.ComponentModel.Container
        Me.ErrorProvider1 = New System.Windows.Forms.ErrorProvider(Me.components)
        Me.TextBox1 = New System.Windows.Forms.TextBox
        CType(Me.ErrorProvider1, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'ErrorProvider1
        '
        Me.ErrorProvider1.ContainerControl = Me
        '
        'TextBox1
        '
        Me.TextBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
              Or System.Windows.Forms.AnchorStyles.Left) _
              Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
        Me.TextBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.TextBox1.Location = New System.Drawing.Point(2, 2)
        Me.TextBox1.Name = "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(102, 20)
        Me.TextBox1.TabIndex = 0
        '
        'TextBoxOper
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.Controls.Add(Me.TextBox1)
        Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Name = "TextBoxOper"
        Me.Size = New System.Drawing.Size(117, 26)
        CType(Me.ErrorProvider1, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)
        Me.PerformLayout()
    
      End Sub
      Friend WithEvents ErrorProvider1 As System.Windows.Forms.ErrorProvider
      Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    
    
    
    #Region "Propiedades añadidas al control"
    
      <Category("Especiales")> _
      <Description("Numerico: solo aceptamos numeros enteros. " & _
             "Decimales: aceptamos numeros decimales. " & _
             "Texto: solo caracteres. " & _
             "Normal: aceptamos de todo")> _
      Property Tipo() As _formas
        Get
          Return _tipo
        End Get
        Set(ByVal value As _formas)
          _tipo = value
        End Set
      End Property
    
      <Category("Especiales")> _
      <Description("Indica si el campo es obligatorio.")> _
      Property Obligatorio() As Boolean
        Get
          Return _obligatorio
        End Get
        Set(ByVal value As Boolean)
          _obligatorio = value
        End Set
      End Property
    
      <Category("Especiales")> _
      <Description("Cuando seleccionemos un tipo numerico, este valor indicara si permitimos o no signo a los numeros.")> _
      Property Signo() As Boolean
        Get
          Return _signo
        End Get
        Set(ByVal value As Boolean)
          _signo = value
        End Set
      End Property
    
    #End Region
    
    
    End Class
    


    Un saludo, Dani.
    lunes, 22 de noviembre de 2010 13:28
  • Deberias hacer un Overrides de Font y en ese momento asignarle la fuente tambien a tu textBox. O en su defecto creaerte una propiedad publica que modifique la fuente de tu TextBox.
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    lunes, 22 de noviembre de 2010 13:31
    Moderador
  • Ahora el problema que tengo es que no se ajusta el UserControl al TextBox. Cuando el TextBox crece, la zona grisacea no lo hace.

    <Category("Especiales")> _
      <Description("Establecemos/obtenemos la fuente del textbox.")> _
      Public Overrides Property Font() As System.Drawing.Font
        Get
          Return _fuente
        End Get
        Set(ByVal value As System.Drawing.Font)
          _fuente = value
          MyBase.Font = _fuente
          TextBox1.Font = _fuente
        End Set
      End Property
    


    Un saludo, Dani.
    lunes, 22 de noviembre de 2010 13:58
  • Prueba a establecer la propiedad AutoSize del UserControl a True
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    lunes, 22 de noviembre de 2010 14:03
    Moderador
  • Mmmmm esa propiedad la habia probado antes y no me funcionaba, pero me acabo de dar cuenta que lo que me estaba dando problemas era propiedad Anchor, tenia puesto Top,Left,Right y Bottom, el bottom impedia que se ajustara bien ..

    Eliminando el Bottom funciona, pero claro, cuando quiera que sea Multiline si agrando el control , el textbox de su interior no crecerá ...

     

    pd: Lo siento por el quebradero de cabeza ..


    Un saludo, Dani.
    lunes, 22 de noviembre de 2010 14:09
  • Has probado con Dock?
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    lunes, 22 de noviembre de 2010 14:13
    Moderador
  • En cuando establezco la Dock los anchor se pierden, y no puedo utilizar el fill pq necesito el espacio para que aparezca el error provider.
    Un saludo, Dani.
    lunes, 22 de noviembre de 2010 14:21
  • Jeje, dejame que haga una prueba y te digo algo...

     

    Se me ocurre que puedes hacerlo con un SplitContainer, en el panel1, pones el TextBox (Dock=Fill) y en el Segundo el ErrorProvider.


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    lunes, 22 de noviembre de 2010 14:23
    Moderador
  • Estoy probando jtorrecilla, pero estoy teniendo problemas para mostrar el ErrorProvider en el otro panel.

    El ErrorProvider no he conseguido que se muestre.

    Sigo con peleandome con ello.


    Un saludo, Dani.
    lunes, 22 de noviembre de 2010 15:56
  • Este control lo estás haciendo para mostrar un ToolTip con otra letra?
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    lunes, 22 de noviembre de 2010 15:58
    Moderador
  • No no. Lo que estoy intentando crearme es un control textbox, que segun las propiedades que indiquemos se comporte como un textbox numerico,alfanumerico, un campo obligatorio, un campo fecha, etc .. y que haga sus validaciones e informe de errores con el error provider.

    Un saludo, Dani.
    lunes, 22 de noviembre de 2010 16:00
  • No haz intentado hacer un control Heredado de TextBox?

    Partial
     Class
     TextBoxOper
    Inherits System.Windows.Forms.TextBox

    Jackson Rosado Developer c#, VFP, PL/SQL DBA - Oracle 10g
    lunes, 22 de noviembre de 2010 23:24
  • Hola theJackEcuador,

    sí, lo había pensado, pero quería usar un errorProvider para que me señalizara un posible error, entiendo que si hago lo que me dices, no podre ponerselo.


    Un saludo, Dani.
    martes, 23 de noviembre de 2010 8:35
  • Lo probé y me funciono. 

     

    Public Class texto
     Inherits System.Windows.Forms.TextBox
     Friend WithEvents ErrorProvider1 As System.Windows.Forms.ErrorProvider
     Public Sub New()
      Me.ErrorProvider1 = New ErrorProvider()
      Me.ErrorProvider1.ContainerControl = Me.Parent
      CType(Me.ErrorProvider1, System.ComponentModel.ISupportInitialize).BeginInit()
      Me.ErrorProvider1 = New System.Windows.Forms.ErrorProvider()
      Me.ErrorProvider1.SetIconAlignment(Me, ErrorIconAlignment.MiddleRight)
      Me.ErrorProvider1.SetIconPadding(Me, 2)
      Me.ErrorProvider1.BlinkRate = 1000
      Me.ErrorProvider1.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.AlwaysBlink
     End Sub
    
     Private Sub texto_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Validated
      If Me.Text = String.Empty Then
       ErrorProvider1.SetError(Me, "No puede estar vacío")
      End If
     End Sub
    End Class
    
    
    Espero te sirva, saludos.

     


    Jackson Rosado Developer c#, VFP, PL/SQL DBA - Oracle 10g
    • Marcado como respuesta danielovik jueves, 25 de noviembre de 2010 9:58
    martes, 23 de noviembre de 2010 20:52
  • Hola Jackson.

    genial, la solución me ha venido como anillo al dedo.

    Muchas gracias.


    Un saludo, Dani.
    jueves, 25 de noviembre de 2010 9:57
  • Chevere, un placer haberte podido ayudar 

    Saludos


    Jackson Rosado Developer c#, VFP, PL/SQL DBA - Oracle 10g
    sábado, 27 de noviembre de 2010 0:02