Mostrando entradas con la etiqueta WINFORMS. Mostrar todas las entradas
Mostrando entradas con la etiqueta WINFORMS. Mostrar todas las entradas

viernes, 5 de abril de 2013

Menú contextual y grid view de windows forms

Enunciado

Imagina un gridview con varias filas. Haces click con el botón derecho y se despliega un menú contextual con opciones editar, borrar,...etc.
Quieres que si eliges editar se abra una ventana para editar la fila sobre la que estas pinchando.
El problema es que las propiedades currentRow y SelectedRows no corresponden a la fila que pinchas.

Solución

Hay que interceptar el evento mousedown para cambiar la selección a la fila debajo del pincho del ratón.

    Private Sub gvContactos_clickContexto(sender As Object, e As MouseEventArgs) Handles gvContactos.MouseDown

        Dim hti = gvContactos.HitTest(e.X, e.Y)
        If (hti.Type = DataGridViewHitTestType.Cell) Or (hti.Type = DataGridViewHitTestType.RowHeader) Then
            gvContactos.ClearSelection()
            gvContactos.Rows(hti.RowIndex).Selected = True
        End If

    End Sub

    Private Sub gvContactos_EditarActiv(sender As Object, e As System.EventArgs) Handles gvContactos.DoubleClick,
                                                                                        btnEditaActivContacto.Click,
                                                                                         btnCtxEditActivCto.Click
        If gvContactos.SelectedRows.Count = 1 Then editaActivContacto(CType(gvContactos.SelectedRows(0).DataBoundItem, tblFbContacto))
    End Sub

    Private Sub gvcontactoEdita_Click(sender As Object, e As System.EventArgs) Handles btnEditaContacto.Click,
                                                                                    btnCtxEditarContacto.Click
        If gvContactos.SelectedRows.Count = 1 Then
            editaContacto(CType(gvContactos.SelectedRows(0).DataBoundItem, tblFbContacto))
        End If
    End Sub
Algunos ejemplos que he visto comprueban si se ha pulsado el botón derecho o el izquierdo en el argumento del evento mousedown. En mi caso no lo hago porque en cualquier caso quiero reducir la selección a una fila.

miércoles, 10 de octubre de 2012

DisplayMember en windows forms checkedlistbox

Problema:

 El control checkedlistbox de de Windows Forms no me ofrece los atributos "Displaymember" o "Valuemember" en las ventana de propiedades o en la lista inteligente de código.

Solución:

Establecerlo en código aunque no aparezca en la lista. Existe pero está marcado como no browseable.
!Atención¡ Escribe bien las mayúsculas y minúsculas.

Ejemplo;

miCheckedListBox.DisplayMember="Descripcion"

Referencia:

lunes, 1 de octubre de 2012

Chekbox en windows forms solo lectura

Enunciado

A diferencia de otros controles de Windows forms las checkbox no pueden marcarse como de solo lectura (readonly). Si utilizas la propiedad Enabled, pasan a un color gris claro que se ve mal, y no es modificable.

Solución:

Coloca las casillas dentro de un panel (por ejemplo panel1)
Importa la función WindowEnabled de user32.dll para poder deshabilitar eventos de ratón y teclado en ese panel.
Imports System.Runtime.InteropServices
Public Class Form1
    <DllImport("user32.dll")> _
    Private Shared Function EnableWindow(hWnd As IntPtr, bEnable As Boolean) As Boolean
    End Function

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        EnableWindow(Panel1.Handle, False)
    End Sub