Oppure

Loading
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:
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?:d
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...8-|
Ultima modifica effettuata da Renny 06/10/11 20:10
aaa
06/10/11 20:12
GN
Non ho ben capito a cosa ti serve, ma quello che posso dirti è che non devi trascinare una listbox ma il controllo utente.
aaa
07/10/11 10:51
walker93
Spero di aver capito quello che vuoi fare...
se ho capito ti stai solo complicando la vita...
La textBox prevede alcune proprietà per gestire suggerimenti:
-AutoCompleteCustomSource
-AutoCompleteMode
-AutoCompleteSource

la prima definisce gli elementi da suggerire (quelli che tu hai nella tua listbox) ed è da usare con la 3°
la seconda indica il modo per suggerire tali elementi
la terza indica la sorgente degli elementi da suggerire, se inserisci CoustomSource saranno quelli definiti nella 1° proprietà

gioca con questi elementi...;)
aaa
07/10/11 17:13
walker93
Adesso che ci penso... Guarda questo programma...
pierotofy.it/pages/sorgenti/dettagli/17697-HTML_IntelliSense_1dot5/

ha l'intellisense... potrebbe servirti
aaa