Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Iso

VB Net - Adicionar checkbox num combobox

Recommended Posts

Preciso selecionar mais de um item num combobox, por isso pensei em colocar checkbox dentro do combobox, podendo checar quantos items eu quiserAchei um exemplo de como fazer isso mas só no VB6, assim:------------------------------------------------------------------------------Option Explicit Private Const EC_LEFTMARGIN = &H1Private Const EC_RIGHTMARGIN = &H2Private Const EC_USEFONTINFO = &HFFFF&Private Const EM_SETMARGINS = &HD3&Private Const EM_GETMARGINS = &HD4&Private Declare Function FindWindowEx Lib "user32" _ Alias "FindWindowExA" _ (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _ ByVal lpszClass As String, _ ByVal lpszWindow As String) As LongPrivate Declare Function SendMessageLong Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Sub AddCheckToCombo( _ ByRef chkThis As CheckBox, _ ByRef cboThis As ComboBox _ ) Dim lhWnd As Long Dim lMargin As Long lhWnd = FindWindowEx(cboThis.hwnd, 0, "EDIT", vbNullString) If (lhWnd <> 0) Then lMargin = chkThis.Width \ Screen.TwipsPerPixelX + 2 SendMessageLong lhWnd, EM_SETMARGINS, EC_LEFTMARGIN, lMargin chkThis.BackColor = cboThis.BackColor chkThis.Move _ cboThis.Left + 3 * Screen.TwipsPerPixelX, _ cboThis.Top + 2 * Screen.TwipsPerPixelY, _ chkThis.Width, _ cboThis.Height - 4 * Screen.TwipsPerPixelY chkThis.ZOrder End IfEnd SubPrivate Sub Form_Load() AddCheckToCombo Check1, Combo1 Dim i As Long For i = 1 To 20 Combo1.AddItem "Test" & i Next iEnd Sub-----------------------------------------------------------------------------------como fazer isso no VB Net?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria mais simples (e também mais óbvio, já que nunca vi uma combobox com checkboxes), utilizar uma ListView (que já permite colocar checkboxes nos itens)?Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe checkbox em combobox sim, achei varios exemplos em outras linguagens...meu problema não se resolve com listbox pq quero q se comporte como um combobox...

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe checkbox em combobox sim, achei varios exemplos em outras linguagens...

Eu não disse que não existe, só que nunca vi (você pode citar algum programa em que se possa ver isso, como um Word, Excel, CorelDraw, etc.?)

meu problema não se resolve com listbox pq quero q se comporte como um combobox...

Eu não falei ListBox e sim ListView, que é parecida mas não igual. Mas, pense comigo, se o propósito de uma combobox é mostrar vários itens para que apenas *um* fique selecionado (que é o que você realmente *vê*, quando fecha a caixa), pra quê marcar os itens se apenas *um* vai ficar visível após a seleção? Já em uma ListView (ou mesmo em uma ListBox) você *vê* vários itens e pode marcá-los também. A diferença é que depois de marcar você vai continuar vendo *vários* itens, e não apenas um (como é o caso da combo). Fazendo uma analogia, é como você querer cortar um papel com uma faca ao invés de uma tesoura, ou seja, dá pra fazer, mas não é o adequado. Pelo menos não do meu ponto de vista.Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe, não quis ser grossaé q no exemplo q vi, os itens q eu checava ficavam todos entre virgulas no combo quando ele está fechadoé q quero q fique fechado, não quero q fique uma caixa aberta, um listview fica fechado se eu quiser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe, não quis ser grossa

E você não foi... portanto não há porque se desculpar. :)

é q no exemplo q vi, os itens q eu checava ficavam todos entre virgulas no combo quando ele está fechado

Hummm, entendo. Bom, você pode tentar portar aquele código ali para .NET, mas não sei se ele vai ser válido, uma vez que os controles (ComboBox e CheckBox) podem ser diferentes dos esperados. Ou você poderia tentar fazer isso através do evento DrawItem, que lhe permite definir a forma como cada um dos itens será "desenhado".

é q quero q fique fechado, não quero q fique uma caixa aberta, um listview fica fechado se eu quiser?

Sim, isso é possível de se fazer. Coloque a seguinte classe aí no seu projeto (pode ser dentro da classe do form):
Public Class ListViewFechável		Inherits ListView		Private Const ABERTO = 200		Private Const FECHADO = 20		Public Sub New()			MyBase.New()			Me.Scrollable = False			Me.CheckBoxes = True			Me.View = Windows.Forms.View.Details			Me.Width = 150			Me.Columns.Add("Opções", Me.Width, HorizontalAlignment.Left)			If Me.Focused Then				Me.Height = ABERTO			Else				Me.Height = FECHADO			End If		End Sub		Protected Overrides Sub OnGotFocus(ByVal e As EventArgs)			Me.Height = ABERTO			MyBase.OnGotFocus(e)		End Sub		Protected Overrides Sub OnLostFocus(ByVal e As EventArgs)			Dim s As String = ""			For Each it As ListViewItem In Me.CheckedItems				s = s & it.Text & ", "			Next			If s.Length = 0 Then				s = "Opções"			Else				s = s.Substring(0, s.Length - 2)			End If			Me.Columns(0).Text = s			Me.Height = FECHADO			MyBase.OnLostFocus(e)		End Sub	End Class
Depois, faça o seguinte para utilizá-la (pode ser no evento Load do form):
Dim m As New ListViewFechável()		m.Location = New Point(20, 20)		m.Show()		Me.Controls.Add(m)		For i As Integer = 1 To 10			m.Items.Add(i.ToString())		Next
E pronto, está aí a sua ListView que abre e fecha quando ganha e perde o foco, além de mostrar os itens selecionados quando está fechada (separados por vírgula).Certo? ;)Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum... parece legal... vou tentarestou um pouco ocupada com outras coisas por isso estou demorando pra respondervaleu

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.