lunes, 18 de marzo de 2013

Mover controles de un formulario en tiempo de ejecución

Este ejemplo permite mover los controles de un formulario en tiempo de ejecución.

Paso 1: Declaramos variables

Private dragging As Boolean
Private posicionX, posicionY As Integer

Paso 2: Capturamos la posición del control Panel mediante las variables 

Private Sub Panel1_MouseDown(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles Panel1.MouseDown
        dragging = True
        posicionX = e.X
        posicionY = e.Y
End Sub

Paso 3: Programar MouseMove

Private Sub Panel1_MouseMove(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles Panel1.MouseMove
        If dragging = True Then
            Panel1.Location = New Point(Panel1.Location.X + e.X -
            posicionX, Panel1.Location.Y + e.Y - posicionY)
            Me.Refresh()
        End If
End Sub

Paso 4: Programar MouseUp

Private Sub Panel1_MouseUp(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles Panel1.MouseUp
        dragging = False
End Sub

Limpiar cajas de texto

A continuación tenemos un ejemplo que permitirá limpiar cajas de textbox utilizando For Each la cual hará un recorrido de todos los textbox contenidos en el formulario.

Código fuente


Paso 1: Programar botón btnLimpiar

Private Sub btnLimpiar_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnLimpiar.Click
        Limpiar_TextBox(Me)
End Sub

Paso 2: Programar función 

Public Sub Limpiar_TextBox(ByVal controls As Control)
  For Each control As Control In controls.Controls
     If TypeOf control Is TextBox Then
         control.Text = ""
        If control.TabIndex = 1 Then
           control.Focus()
        End If
     End If
  Next
End Sub

Elaborar un informe utilizando un DataSet y pasarle parámetros

A continuación tenemos un ejemplo que nos permitirá elaborar un informe utilizando.

  • DataSet.xsd Un conjunto de datos , por lo general se presentan en forma de tabla. Cada columna representa una variable en particular. Cada fila corresponde a un determinado miembro del conjunto de datos en cuestión
  • Report.rdlc Permitirá procesar y mostrar el informe en la aplicación
  • ReportViewer Se utiliza para alojar informes en proyectos de aplicaciones para windows

En nuestro caso estamos utilizando un DataSet, esta compuesta por un procedimiento almacenado que tiene una variable "@estado".

Paso 1: Agregamos un nuevo DataSet


Paso 2: Pulsamos clic en Explorador de servidores.


Paso 3: Establecemos la conexión con el origen de datos.


Paso 4: Seleccionamos procedimientos almacenados, en nuestro caso SP_LISTAR_PRODUCTOS_POR_ESTADO, la cual tiene un parámetro Fil,GetData(@ESTADO)


Paso 5: Agregamos nuevo informe.


Paso 6: Una vez agregado el informe seleccionamos

Datos de informe > Nuevo > Conjunto de datos

 

Elijemos el conjunto de datos.

Paso 7: Configuramos nuestro informe.


Paso 8: Agregamos nuevo formulario.


Paso 9: Agregamos un nuevo control ReporViewer

Luego elejimos el informe que vamos a mostrar y automáticamente nos creara lo siguientes: DataSet, BindingSource, TableAdapter.




Paso 10: Programamos el evento SelectedIndexChanged del combobox.

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.ObjectByVal e As System.EventArgsHandles ComboBox1.SelectedIndexChanged

Try
  'capturamos el valor de items seleccionado
  Dim _Estado As String = ComboBox1.SelectedItem
  Me.SP_LISTAR_PRODUCTOS_POR_ESTADOTableAdapter.Fill(Me.DataSet1.SP_LISTAR_PRODUCTOS_POR_ESTADO, _Estado)
  Me.ReportViewer1.RefreshReport()

Catch ex As Exception
    MessageBox.Show(ex.Message, "vb.net"MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Paso 11: Vista final del informe


Exportar solo a PDF desde un ReportViewer

A continuación tenemos un ejemplo que nos permitirá filtrar los elementos del combobox que se encuentra en el ReportViewer. 

Los ítems Excel y Word pasaremos a ocultar y solo mostraremos PDF.


Código Fuente


Paso 1: Importar dependencias

Imports System.Reflection

Paso 2: Programamos el Load del ReportViewer.

Private Sub ReportViewer1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles ReportViewer1.Load
Try
    For Each elemento As Microsoft.Reporting.WinForms.RenderingExtension In ReportViewer1.LocalReport.ListRenderingExtensions
                'ponemos la condición para evitar que se muestre la exportación a Excel y a Word
      If elemento.Name = "Excel" Or elemento.Name = "WORD" Then
       'traemos la información del campo con sus respectivos flags
        Dim infCampo As FieldInfo = elemento.[GetType]().GetField("m_isVisible"BindingFlags.Instance Or BindingFlags.NonPublic)
        'colocamos el valor de false a la extension
        infCampo.SetValue(elemento, False)
       End If
    Next
 Catch ex As Exception
    MessageBox.Show(ex.Message, "vb.net"MessageBoxButtons.OK, MessageBoxIcon.Error)
 End Try

End Sub

martes, 12 de marzo de 2013

Mover un formulario desde un control

A continuación tenemos un ejemplo que permitirá mover un formulario en tiempo de ejecución , en nuestro caso estamos utilizando una Label.

Código Fuente

Paso 1: Declaramos la variables que capturen la posición del formulario

    Dim oPoint As New System.Drawing.Point
    Dim posicionX, posicionY As Integer

Paso 2: Cuando pulsemos click sobre el control capturaremos la posición X , Y del form

Private Sub Label1_MouseDown(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles Label1.MouseDown
        If e.Button = MouseButtons.Left Then
            'resta la posición del control que manda a la posición de la forma...
            posicionX = Control.MousePosition.X - Me.Location.X
            'centro del control.
            posicionY = Control.MousePosition.Y - Me.Location.Y
        End If
End Sub

Paso 3: Asignamos la nueva posición del form

Private Sub Label1_MouseMove(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles Label1.MouseMove
        If e.Button = MouseButtons.Left Then
            oPoint = Control.MousePosition
            oPoint.X -= (posicionX)
            oPoint.Y -= (posicionY)
            Me.Location = oPoint
            My.Settings.Save()
        End If
End Sub

Eliminar registros de una lista genérica

A continuacion utilizaremos.

RemoveList : Elimina un objeto de la List(Of T). 

En nuestro caso eliminaremos registros basándose en la columna código siempre y cuando cumpla la condición.


Código fuente


Paso 1: Creamos una clase llamada oProducto

Public Class oProducto

    Public Property Codigo As Integer
    Public Property producto As String
    Public Property precio As Double
    Public Property cantidad As Integer
    Public Property estado As String
End Class

Paso 2: Declaramos una variable tipo Lista

Dim loProducto As New List(Of oProducto)

Paso 3: Declaramos una variable, Asiendo referencia a la clase oProducto

Private Sub btnAgregar_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnAgregar.Click
Try
   'Declaramos una variable, Asiendo referencia a la clase oProducto
   Dim oProducto As New oProducto
   With oProducto
       .Codigo = txtCodigo.Text
       .producto = txtProducto.Text
       .cantidad = CInt(txtCantidad.Text)
       .precio = CDbl(txtPrecio.Text)
    'Verificamos  si esta seleccionado sera Activo de lo contrario Inactivo
        .estado = If(chkEstado.Checked = True"Activo""Inactivo")
   End With
    'Agregamos los elementos 
   loProducto.Add(oProducto)

   'llamamos al procediento
   Listar_productos()

    'invocamos al evento Click del boton Nuevo
    btnNuevo_Click(sender, e)
           
Catch ex As Exception
     MessageBox.Show("Error al registrar producto.""vb.net"MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Paso 4: Capturamos el código del producto a eliminar

Private Sub btnEliminar_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnEliminar.Click
Try
   Dim resultado As DialogResult = MessageBox.Show("Desea eliminar producto", _
                                                    "vb.net", _
                                                    MessageBoxButtons.YesNo, _
                                                    MessageBoxIcon.Question)
   If (resultado = MsgBoxResult.Yes) Then

  'Capturamos el código del producto a eliminar
    Dim _Codigo As Integer = CInt(txtCodigo.Text)
  Dim removeList As List(Of oProducto) = loProducto
    removeList.RemoveAll(Function(p As oProducto) p.Codigo = _Codigo)

 btnNuevo_Click(sender, e)

  'Listamos los producto
   Listar_productos()

    MessageBox.Show("Registro eliminado""vb.net", _
                                            MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
Catch ex As Exception
            MessageBox.Show(ex.Message, "vb.net", _
              MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Paso 5: Función Listar_productos

Sub Listar_productos()
Try
  If (loProducto IsNot NothingThen
   dtgProductos.Rows.Clear()
   For rows As Integer = 0 To loProducto.Count - 1
   dtgProductos.Rows.Add()
   'asignamos los valores
   dtgProductos("txt_dtgCodigo", rows).Value = loProducto(rows).Codigo
   dtgProductos("txt_dtgProducto", rows).Value = loProducto(rows).producto
   dtgProductos("txt_dtgCantidad", rows).Value = loProducto(rows).cantidad
   dtgProductos("txt_dtgPrecio", rows).Value = loProducto(rows).precio
   dtgProductos("txt_dtgEstado", rows).Value = loProducto(rows).estado
    Next
End If
Catch ex As Exception
            MessageBox.Show("Error mientras se listaba los productos...""vb.net"MessageBoxButtons.OK, MessageBoxIcon.Error)
 End Try
End Sub

Paso 6: Programar botón btnNuevo

Private Sub btnNuevo_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnNuevo.Click
        txtCodigo.Clear()
        txtProducto.Clear()
        txtCantidad.Clear()
        txtPrecio.Clear()
        chkEstado.Checked = True
        txtCodigo.Focus()
End Sub

Paso 7: Programar Datagridview

Private Sub dtgProductos_CellClick(ByVal sender As System.ObjectByVal e As System.Windows.Forms.DataGridViewCellEventArgsHandles dtgProductos.CellClick
Try
   If (e.RowIndex > -1) Then
     txtCodigo.Text = CInt(dtgProductos("txt_dtgCodigo", e.RowIndex).Value)
     txtProducto.Text = dtgProductos("txt_dtgProducto", e.RowIndex).Value
     txtCantidad.Text = dtgProductos("txt_dtgCantidad", e.RowIndex).Value
     txtPrecio.Text = dtgProductos("txt_dtgPrecio", e.RowIndex).Value
     chkEstado.Checked = If(dtgProductos("txt_dtgEstado", e.RowIndex).Value = "Activo"TrueFalse)
    End If
Catch ex As Exception
MessageBox.Show("Error""vb.net"MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Resultado

Mostramos el reporte luego de haber eliminado el registro de la lista genérica.


domingo, 10 de marzo de 2013

Redondear números enteros y decimales

A continuación tenemos un ejemplo que nos permitirá, redondear números enteros y decimales utilizando la función Fix:

  • Función Fix: Devuelve la parte entera del número dado. Pero si el número es negativo, devuelve un número negativo mayor que o igual al número 


Código fuente


Paso 1: Función Listar_Unidades

Sub Listar_Unidades()
Try
  ListBox1.Items.Add("DiezMilesima")
  ListBox1.Items.Add("Milesima")
  ListBox1.Items.Add("Centesima")
  ListBox1.Items.Add("Decima")
  ListBox1.Items.Add("Unidad")
  ListBox1.Items.Add("Decena")
  ListBox1.Items.Add("Centena")
  ListBox1.Items.Add("Mil")
  ListBox1.Items.Add("Diez Mil")
Catch ex As Exception
    MessageBox.Show("Error...""vb.net"MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub


Paso 2: Llamar a la función Listar_Unidades

Private Sub redondear_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
   Listar_Unidades()
End Sub

Paso 3: Implementar función RoundI

Public Function RoundI(ByVal x As DoubleOptional ByVal d As Integer = 0) As Double
  Dim m As Double
  m = 10 ^ d
  If x < 0 Then
     RoundI = Fix(x * m - 0.5) / m
  Else
     RoundI = Fix(x * m + 0.5) / m
  End If
End Function

Paso 4: Programar ListBox

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.ObjectByVal e As System.EventArgsHandles ListBox1.SelectedIndexChanged
Try
   If (txtValor.Text <> ""Then
        
      Dim Unidad As String = ListBox1.Items.Item(ListBox1.SelectedIndex)
      Dim resultado As Double = CDbl(txtValor.Text)
      Select Case Unidad
        Case "DiezMilesima"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), 4)
        Case "Milesima"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), 3)
        Case "Centesima"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), 2)
        Case "Decima"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), 1)
        Case "Unidad"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), 0)
        Case "Decena"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), -1)
        Case "Centena"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), -2)
        Case "Mil"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), -3)
        Case "Diez Mil"
           txtRedondear.Text = RoundI(CDbl(txtValor.Text), -4)
     End Select
Else
    MessageBox.Show("Ingrese valor a redondear""vb.net"MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Catch ex As Exception
    MessageBox.Show(ex.Message, "vb.net"MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub


Fuente de información

sábado, 9 de marzo de 2013

Llenar un combobox desde una clase

A continuación tenemos un ejemplo que permitirá cargar datos a un control "combobox" desde una clase. 

Con el evento SelectedIndexChange podremos recuperar los valores alojados en cada elemento del combobox.


Código fuente


Paso 1: Agregamos una clase ucComboBox 

Public Class ucComboBox

    Public Value As Object
    Public Description As String

    Public Sub New(ByVal NewValue As ObjectByVal NewDescription As String)
        Value = NewValue
        Description = NewDescription
    End Sub

    Public Overrides Function ToString() As String
        Return Description
    End Function

End Class

Paso 2: Cargamos los valores en el evento Load del formulario.

Private Sub Form2_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
Try
        Dim Codigo() As Integer = {1, 2, 3}
        Dim Productos() As String = {"Producto A""Producto B""Producto C"}

        'Agregamos los elementos al ComboBox
        For index As Integer = 0 To Productos.Length - 1
            ComboBox1.Items.Add(New ucComboBox(Codigo(index), Productos(index)))
        Next

        ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

Catch ex As Exception
  MessageBox.Show(ex.Message, "vb.net", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
End Sub

Paso 3: Validamos el SelectedIndexChanged del combobox.

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.ObjectByVal e As System.EventArgsHandles ComboBox1.SelectedIndexChanged
Try
     ' Capturamos el items Seleccionado
     Dim oCombo As ucComboBox
    oCombo = ComboBox1.SelectedItem
' Asignamos los valores capturados a las cajas de texto
        txtCodigo.Text = oCombo.Value
        txtNombre.Text = oCombo.Description

Catch ex As Exception
                          MessageBox.Show(ex.Message, "vb.net", _
                        MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
End sub