Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Hide Selection in Listbox
Forum - C# / VB.NET - [VB.NET] Hide Selection in Listbox

Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 22:03
Giovedì, 06/10/2011
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:
Codice sorgente - presumibilmente VB.NET

  1. Public Class ListBoxEx
  2.     Inherits ListBox
  3.     Private m_hideSelection As Boolean = True
  4.  
  5.     Public Property HideSelection() As Boolean
  6.         Get
  7.             Return m_hideSelection
  8.         End Get
  9.         Set(ByVal value As Boolean)
  10.             m_hideSelection = value
  11.         End Set
  12.     End Property
  13.  
  14.     Public Sub New()
  15.         Me.DrawMode = DrawMode.OwnerDrawFixed
  16.     End Sub
  17.  
  18.     Protected Overrides Sub OnDrawItem(ByVal e As DrawItemEventArgs)
  19.         If ((e.State And DrawItemState.Selected) = DrawItemState.Selected) AndAlso Me.Focused = False AndAlso Me.m_hideSelection = False Then
  20.             Using br As New SolidBrush(SystemColors.ControlDark)
  21.                 e.Graphics.FillRectangle(br, e.Bounds)
  22.             End Using
  23.         Else
  24.             e.DrawBackground()
  25.         End If
  26.         If Me.Items.Count > 0 Then
  27.             Using br As New SolidBrush(e.ForeColor)
  28.                 e.Graphics.DrawString(Me.GetItemText(Me.Items(e.Index)), e.Font, br, e.Bounds)
  29.             End Using
  30.         End If
  31.     End Sub
  32.  
  33.     Protected Overrides Sub OnLostFocus(ByVal e As EventArgs)
  34.         MyBase.OnLostFocus(e)
  35.         Me.Invalidate()
  36.     End Sub
  37.  
  38.     Private Sub InitializeComponent()
  39.         Me.SuspendLayout()
  40.         Me.ResumeLayout(False)
  41.  
  42.     End Sub
  43. 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 il 06/10/2011 alle 22:10
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 19:13
Venerdì, 07/10/2011
Adesso che ci penso... Guarda questo programma...
http://www.pierotofy.it/pages/sorgenti/dettagli/17697-HTML ...

ha l'intellisense... potrebbe servirti

Si, l'ho già visto.. Ora ci ridò un'occhio, perchè i lavori del totem sono sempre pieni di sorprese e spunti interessanti.. Comunque sto usando il codice che ho postato creando il controllo a runtime e aggiungendolo al form.. funziona! ;) - Renny - 07/10/11 20:02
PM
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 22:12
Giovedì, 06/10/2011
Non ho ben capito a cosa ti serve, ma quello che posso dirti è che non devi trascinare una listbox ma il controllo utente.

Si.. Ma, se puoi gentilmente spiegarmi come usare questo codice.. Lo incollo in un nuovo elemento "controllo utente", ma poi, per averlo nella barra degli strumenti, come si fa? - Renny - 06/10/11 22:21
Ora ho capito il tuo problema, ce l'ho avuto anch'io ed è postato qui [url]http://www.pierotofy.it/pages/extras/forum/16/1026744-%5Bvbnet_problema_con_controllo_utente/[/url] - GN - 06/10/11 22:24
Eh.. credo sia dovuto al fatto che io non ho l'assembly di quel componente.. Non è stato creato. Esiste solo la classe che lo definisce, che è il codice che ho postato.. - Renny - 06/10/11 22:30
Ok, ce l'ho fatta, a quanto sembra..Devi fare come ti suggeriscono loro, cioè, lo aggiungi alla casella degli strumenti. Prima però devi definire nelle proprietà del controllo utente un namespace.. Boh, ho smanettato un po e alla fine è saltato fuori. Il tuo controllo ha l'icona di una ruota dentata - Renny - 06/10/11 22:39
Se però qualche guru ci da comunque un'occhiata al codice e mi dice che ne pensa.. grazie! - Renny - 07/10/11 00:07
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 12:51
Venerdì, 07/10/2011
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...;)

Uhm.. No, non credo vada bene.. Io vorrei fare una cosa tipo l'intellisense..Anzi, potendo mettere un numero limitato "parole" (o sigle di una codifica, nel mio caso), voglio forzare l'utente o a cercare la parola da scrivere nella listbox, oppure la scrive lui, digitando le lettere nella textbox.. - Renny - 07/10/11 16:21
PM