Ahh, es como lo dije en un principio yo tengo creados objetos personalizados o sea cree un dll con herencia del textbox de microsoft y extendi sus propiedades , por eso tengo que compararlo con el tipo de mi dll y no con un textbox de microsoft, que al final de cuentas es de microsoft pero extendi sus propiedades y cree otras, como en el combobox que te dije, hice una clase que hereda de combobox y adicione un procedimiento que se llama isvalidseleccion donde comparo y devulevo un valor, despues hice una referencia en el proyecto a mi dll y en las herramientas cree una nueva pestaña, e importe la dll, y me detecto cada control, asi lo jalo al form.
checate la clase del combobox, es un clase, despues genero el proyecto y genera la dll
Código vb:
Ver originalImports System.Runtime.InteropServices
Public Class ComboBoxIncremental
'la herencia del combobox normal
Inherits System.Windows.Forms.ComboBox
'agrego un nuevo evento
Friend WithEvents ErrorP As System.Windows.Forms.ErrorProvider
'campos accesibles
Private VarRequerido As Boolean
Public VarDespliega As Boolean
Public VarCambiar As Boolean = True
Enum Evento
Entrar
Salir
Habilitar
End Enum
Protected Overrides Sub RefreshItem(ByVal index As Integer)
MyBase.RefreshItem(index)
End Sub
Protected Overrides Sub SetItemsCore(ByVal items As System.Collections.IList)
MyBase.SetItemsCore(items)
End Sub
Private Sub InitializeComponent()
Me.ErrorP = New System.Windows.Forms.ErrorProvider
End Sub
Public Sub New()
MyBase.New()
InitializeComponent()
VarRequerido = False
VarDespliega = True
Me.Text = ""
End Sub
Public Sub Iniciar(Optional ByVal ParRequerido As Boolean = False, Optional ByVal ParDespliega As Boolean = True)
Try
VarRequerido = ParRequerido
VarDespliega = ParDespliega
If Me.DropDownStyle = Windows.Forms.ComboBoxStyle.DropDownList Then
If Me.Items.Count > 0 Then
Me.SelectedIndex = 0
End If
Else
If Me.Items.Count > 0 Then
Me.SelectedIndex = 0
End If
End If
Catch ex As Exception
MsgBox("Error en Iniciar de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Public Function Valido() As Boolean
Try
If VarRequerido Then
If Me.Text = String.Empty Then
ErrorP.SetError(Me, "Campo requerido, ingrese un valor")
Return False
Else
ErrorP.SetError(Me, "")
Return True
End If
Else
ErrorP.SetError(Me, "")
Return True
End If
Catch ex As Exception
MsgBox("Error en Valido de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
End Try
End Function
Public Sub CargarDatos(ByVal ParOrigenDatos As DataTable, ByVal ParLlave As String, ByVal ParTexto As String, Optional ByVal ParDesplegar As String = "")
Try
Dim Aux As New Seguridad
If ParLlave = "IDEmpresa" Then
If Not Aux.VerificarAcceso() Then Exit Sub
End If
Dim Fila As DataRow
Fila = ParOrigenDatos.NewRow
If Fila(ParLlave).GetType.Name = "String" Then
Fila(ParLlave) = ""
Else
Fila(ParLlave) = 0
End If
Fila(ParTexto) = ParDesplegar
ParOrigenDatos.Rows.InsertAt(Fila, 0)
Me.DataSource = ParOrigenDatos
Me.DisplayMember = ParTexto
Me.ValueMember = ParLlave
Me.SelectedIndex = 0
Me.AutoCompleteMode = Windows.Forms.AutoCompleteMode.Append
Me.AutoCompleteSource = Windows.Forms.AutoCompleteSource.ListItems
Catch ex As Exception
MsgBox("Error en CargarDatos de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub Seleccionar(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus, MyBase.Click, MyBase.Enter
Try
CambiarEstilo(Evento.Entrar)
Me.DroppedDown = VarDespliega
Catch ex As Exception
MsgBox("Error en Seleccionar de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub ComboBox_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Leave
Try
CambiarEstilo(Evento.Salir)
If VarCambiar Then
If Not VarDespliega Then
VarDespliega = True
End If
End If
Catch ex As Exception
MsgBox("Error en ComboBox_Leave de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub ComboBoxIncremental_EnabledChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.EnabledChanged
Try
CambiarEstilo(Evento.Habilitar)
Catch ex As Exception
MsgBox("Error en ComboBoxIncremental_EnabledChanged de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub CambiarEstilo(ByVal ParEvento As Evento)
Try
Select Case ParEvento
Case Evento.Entrar
Me.BackColor = Drawing.Color.LightYellow
Case Evento.Salir
Me.BackColor = Drawing.Color.FromName("Window")
Case Evento.Habilitar
Me.BackColor = IIf(Me.Enabled, Drawing.Color.FromName("Window"), Drawing.Color.White)
Me.ForeColor = IIf(Me.Enabled, Drawing.Color.FromName("WindowText"), Drawing.Color.Black)
End Select
Catch ex As Exception
MsgBox("Error en CambiarEstilo de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Public Function IsValidSelection() As Boolean
If Not IsNothing(Me.SelectedValue) AndAlso Me.SelectedIndex > 0 Then
Return True
Else
Return False
End If
End Function
En si no deberias de haber visto el conacc.textboxalfanumerico, pero se me olvido corregir tambien este, porque la validacion del tipo typeof del combo en mi codigo en realidad es asi
Código vb:
Ver originalIf TypeOf C Is CONACC.ComboBoxIncremental Then
If CType(C, CONACC.ComboBoxIncremental).IsValidSelection = False Then
VinculaError(C)
Return False
End If
End If
pero se me paso hacerlo con el textbox, ups, pero espero te sirva. y si te das cuenta hay una redundancia entre las cosas que se hacen, que justamente ahora me di cuenta, el combobox que anteriormente puse el codigo, tiene una funcion que se llama Valido, y yo cree un proc que anteriomente tambien puse para validarlo, que es el for each etc etc, esto es porque este codigo no lo cree yo todo, o sea, lo eh estado modificando, pero su creador ya creo estas propiedades, ojo me acabo de dar cuenta, jajaja, changos.