06/10/11 20:03
Renny
Ciao a tutti. Sono alle prese con un problemino: mi servirebbe la proprietà "Hide Selection" in una listbox. Sto cercando di creare un intellisense per una text box. Ho creato la mia listbox sotto la text; se l'utente sposta il focus dalla listbox alla text box, l'ultimo elemento che aveva il focus della list rimane ombreggiato. Cercando in internet ho trovato che la proprietà che gestisce questo aspetto è presente nelle listview e si chiama appunto hide selection. Per le listbox non c'è, o forse non l'ho trovata.
Cercando su google ho trovato però questo codice:
Da quello che ho capito crea un nuovo oggetto ereditanto le caratteristiche della listbox e aggiungendo in più la proprietà che serve a me.. Il trucco è che ridisegna gli elementi e a seconda del valore della proprietà, toglie l'ombreggiatura agli item quando la list non ha il focus.
Ma non riesco a usarlo.. Incollo il codice in un elemento "controllo utente", e poi? Trascino una listbox?
Non è possibile riutilizzare il codice in qualche modo, prevedento magari sono una sub che agisce riscrivendo solo l'item della mia listbox che ho sul form?
Se decidessi allora di passare alla listView.. che differenze ci sarebbero in termini di performance? Alla fine, la mia list conterrà all'incirca un massimo di 30 items.. più che altro dovrò "cambiarli" spesso...
Ciao e grazie...
Cercando su google ho trovato però questo codice:
Public Class ListBoxEx Inherits ListBox Private m_hideSelection As Boolean = True Public Property HideSelection() As Boolean Get Return m_hideSelection End Get Set(ByVal value As Boolean) m_hideSelection = value End Set End Property Public Sub New() Me.DrawMode = DrawMode.OwnerDrawFixed End Sub Protected Overrides Sub OnDrawItem(ByVal e As DrawItemEventArgs) If ((e.State And DrawItemState.Selected) = DrawItemState.Selected) AndAlso Me.Focused = False AndAlso Me.m_hideSelection = False Then Using br As New SolidBrush(SystemColors.ControlDark) e.Graphics.FillRectangle(br, e.Bounds) End Using Else e.DrawBackground() End If If Me.Items.Count > 0 Then Using br As New SolidBrush(e.ForeColor) e.Graphics.DrawString(Me.GetItemText(Me.Items(e.Index)), e.Font, br, e.Bounds) End Using End If End Sub Protected Overrides Sub OnLostFocus(ByVal e As EventArgs) MyBase.OnLostFocus(e) Me.Invalidate() End Sub Private Sub InitializeComponent() Me.SuspendLayout() Me.ResumeLayout(False) End Sub End Class
Da quello che ho capito crea un nuovo oggetto ereditanto le caratteristiche della listbox e aggiungendo in più la proprietà che serve a me.. Il trucco è che ridisegna gli elementi e a seconda del valore della proprietà, toglie l'ombreggiatura agli item quando la list non ha il focus.
Ma non riesco a usarlo.. Incollo il codice in un elemento "controllo utente", e poi? Trascino una listbox?
Non è possibile riutilizzare il codice in qualche modo, prevedento magari sono una sub che agisce riscrivendo solo l'item della mia listbox che ho sul form?
Se decidessi allora di passare alla listView.. che differenze ci sarebbero in termini di performance? Alla fine, la mia list conterrà all'incirca un massimo di 30 items.. più che altro dovrò "cambiarli" spesso...
Ciao e grazie...
Ultima modifica effettuata da Renny 06/10/11 20:10
aaa