Ver Mensaje Individual
  #9 (permalink)  
Antiguo 07/07/2011, 12:12
Avatar de HaverRamirez
HaverRamirez
 
Fecha de Ingreso: junio-2011
Ubicación: Guatemala
Mensajes: 273
Antigüedad: 13 años, 7 meses
Puntos: 33
Respuesta: Macrosustitucion en Visual Basic 2010

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 original
  1. Imports System.Runtime.InteropServices
  2.  
  3. Public Class ComboBoxIncremental
  4.     'la herencia del combobox normal
  5.     Inherits System.Windows.Forms.ComboBox
  6.     'agrego un nuevo evento
  7.    Friend WithEvents ErrorP As System.Windows.Forms.ErrorProvider
  8.     'campos accesibles
  9.     Private VarRequerido As Boolean
  10.     Public VarDespliega As Boolean
  11.     Public VarCambiar As Boolean = True
  12.  
  13.     Enum Evento
  14.         Entrar
  15.         Salir
  16.         Habilitar
  17.     End Enum
  18.  
  19.  
  20.  
  21.     Protected Overrides Sub RefreshItem(ByVal index As Integer)
  22.         MyBase.RefreshItem(index)
  23.     End Sub
  24.  
  25.     Protected Overrides Sub SetItemsCore(ByVal items As System.Collections.IList)
  26.         MyBase.SetItemsCore(items)
  27.     End Sub
  28.  
  29.     Private Sub InitializeComponent()
  30.         Me.ErrorP = New System.Windows.Forms.ErrorProvider
  31.     End Sub
  32.  
  33.     Public Sub New()
  34.         MyBase.New()
  35.         InitializeComponent()
  36.         VarRequerido = False
  37.         VarDespliega = True
  38.         Me.Text = ""
  39.     End Sub
  40.  
  41.     Public Sub Iniciar(Optional ByVal ParRequerido As Boolean = False, Optional ByVal ParDespliega As Boolean = True)
  42.         Try
  43.             VarRequerido = ParRequerido
  44.             VarDespliega = ParDespliega
  45.             If Me.DropDownStyle = Windows.Forms.ComboBoxStyle.DropDownList Then
  46.                 If Me.Items.Count > 0 Then
  47.                     Me.SelectedIndex = 0
  48.                 End If
  49.             Else
  50.                 If Me.Items.Count > 0 Then
  51.                     Me.SelectedIndex = 0
  52.                 End If
  53.             End If
  54.         Catch ex As Exception
  55.             MsgBox("Error en Iniciar de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  56.         End Try
  57.     End Sub
  58.  
  59.     Public Function Valido() As Boolean
  60.         Try
  61.             If VarRequerido Then
  62.                 If Me.Text = String.Empty Then
  63.                     ErrorP.SetError(Me, "Campo requerido, ingrese un valor")
  64.                     Return False
  65.                 Else
  66.                     ErrorP.SetError(Me, "")
  67.                     Return True
  68.                 End If
  69.             Else
  70.                 ErrorP.SetError(Me, "")
  71.                 Return True
  72.             End If
  73.         Catch ex As Exception
  74.             MsgBox("Error en Valido de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  75.         End Try
  76.     End Function
  77.  
  78.     Public Sub CargarDatos(ByVal ParOrigenDatos As DataTable, ByVal ParLlave As String, ByVal ParTexto As String, Optional ByVal ParDesplegar As String = "")
  79.         Try
  80.             Dim Aux As New Seguridad
  81.             If ParLlave = "IDEmpresa" Then
  82.                 If Not Aux.VerificarAcceso() Then Exit Sub
  83.             End If
  84.  
  85.             Dim Fila As DataRow
  86.             Fila = ParOrigenDatos.NewRow
  87.             If Fila(ParLlave).GetType.Name = "String" Then
  88.                 Fila(ParLlave) = ""
  89.             Else
  90.                 Fila(ParLlave) = 0
  91.             End If
  92.             Fila(ParTexto) = ParDesplegar
  93.             ParOrigenDatos.Rows.InsertAt(Fila, 0)
  94.             Me.DataSource = ParOrigenDatos
  95.             Me.DisplayMember = ParTexto
  96.             Me.ValueMember = ParLlave
  97.             Me.SelectedIndex = 0
  98.             Me.AutoCompleteMode = Windows.Forms.AutoCompleteMode.Append
  99.             Me.AutoCompleteSource = Windows.Forms.AutoCompleteSource.ListItems
  100.         Catch ex As Exception
  101.             MsgBox("Error en CargarDatos de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  102.         End Try
  103.     End Sub
  104.  
  105.     Private Sub Seleccionar(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus, MyBase.Click, MyBase.Enter
  106.         Try
  107.             CambiarEstilo(Evento.Entrar)
  108.             Me.DroppedDown = VarDespliega
  109.         Catch ex As Exception
  110.             MsgBox("Error en Seleccionar de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  111.         End Try
  112.     End Sub
  113.  
  114.     Private Sub ComboBox_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Leave
  115.         Try
  116.  
  117.             CambiarEstilo(Evento.Salir)
  118.             If VarCambiar Then
  119.                 If Not VarDespliega Then
  120.                     VarDespliega = True
  121.                 End If
  122.             End If
  123.          
  124.         Catch ex As Exception
  125.             MsgBox("Error en ComboBox_Leave de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  126.         End Try
  127.     End Sub
  128.  
  129.     Private Sub ComboBoxIncremental_EnabledChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.EnabledChanged
  130.         Try
  131.             CambiarEstilo(Evento.Habilitar)
  132.         Catch ex As Exception
  133.             MsgBox("Error en ComboBoxIncremental_EnabledChanged de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  134.         End Try
  135.     End Sub
  136.  
  137.     Private Sub CambiarEstilo(ByVal ParEvento As Evento)
  138.         Try
  139.             Select Case ParEvento
  140.                 Case Evento.Entrar
  141.                     Me.BackColor = Drawing.Color.LightYellow
  142.                 Case Evento.Salir
  143.                     Me.BackColor = Drawing.Color.FromName("Window")
  144.                 Case Evento.Habilitar
  145.                     Me.BackColor = IIf(Me.Enabled, Drawing.Color.FromName("Window"), Drawing.Color.White)
  146.                     Me.ForeColor = IIf(Me.Enabled, Drawing.Color.FromName("WindowText"), Drawing.Color.Black)
  147.             End Select
  148.         Catch ex As Exception
  149.             MsgBox("Error en CambiarEstilo de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  150.         End Try
  151.     End Sub
  152.  
  153.     Public Function IsValidSelection() As Boolean
  154.         If Not IsNothing(Me.SelectedValue) AndAlso Me.SelectedIndex > 0 Then
  155.             Return True
  156.         Else
  157.             Return False
  158.         End If
  159.     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 original
  1. If TypeOf C Is CONACC.ComboBoxIncremental Then
  2.                     If CType(C, CONACC.ComboBoxIncremental).IsValidSelection = False Then
  3.                         VinculaError(C)
  4.                         Return False
  5.                     End If
  6.                 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.