Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB2010 WinForm] directcast automatico da Object a ..xxx.. oggetto?

    salve gente, non riesco a venire a capo da una situazione!

    ho avuto necessità di crearmi l'utilità di "ToolTipText" (a modo mio ) per alcuni controlli del form che non la supportano, tipo TextBox , CheckBox e altri che utilizzo nel mio progetto..(esattamente come funziona di default il ToolTipText degli oggetti che lo supportano).Tutto funzionava a dovere, fino a quando ho deciso di eliminare codice ripetitivo ed automatizzare il tutto in un unica sub pubblica (nel modulo) chiamata ovunque in qualsiasi form del progetto.

    questa è la sub pubblica nel modulo:
    codice:
        Sub AddHandlers_TipTextEvent(ByVal Oggetto As System.Object, ByVal Mess As String)
    
            'creo la label e la personalizzo simile al ToolTipText di default
            Dim TipText As New Label With {.Name = "TipText_" & Oggetto.name, .AutoSize = True, .BackColor = Color.WhiteSmoke,
                .BorderStyle = BorderStyle.FixedSingle, .Enabled = False, .FlatStyle = FlatStyle.Popup, .Visible = False, .Text = Mess}
    
            'aggiungo la label al form cui appartiene l'oggetto/controllo
            Oggetto.findform.Controls.Add(TipText)
    
            'aggiungo  i tre eventi dell'oggetto/controllo cui associare la funzionalità di ToolTipText
            AddHandler DirectCast(Oggetto, CheckBox).MouseHover, AddressOf TipText_MouseHover ' show
            AddHandler DirectCast(Oggetto, CheckBox).MouseLeave, AddressOf TipText_MouseLeave ' Hide
            AddHandler DirectCast(Oggetto, CheckBox).MouseMove, AddressOf TipText_MouseMove ' Posiziona
    
        End Sub
    poi ci sarebbero le tre sub che vengono associate agli eventi di cui sopra, anch'esse riesiedono nel medesimo Modulo.. ma qua non mi addentro perchè non ho problemi!

    funziona cosi , quando creo un oggetto nel FORM

    codice:
    ..............
       'Creo l'oggetto checkbox e ne assegno le proprietà
       Dim CheckBox1 As New CheckBox With {.Name = "CheckBoxRileva", .Text = "Includi/Seleziona occorrenze di ""Voci"" uguali..",
               .Visible = False, .AutoSize = True, .BackColor = Color.Coral}
    
       ' aggiungo l'oggetto al form
       Me.Controls.Add(CheckBox1) : CheckBox1.BringToFront()
    
       ' questa è la chiamata alla famosa sub pubblica 
       ' che aggiunge all'oggetto appena creato, la funzionalità di ToolTipText
       AddHandlers_TipTextEvent(CheckBox1, "Visualizza il costo complessivo degli elementi selezionati nella colonna ""Voce""")
    
    .............
    dovrebbe funzionare per tutti i tipi di controlli, ma nella famosa sub non riesco a fare il directcast automatico al tipo oggetto passatoli. Per il momento sono fermo e costretto a scrivere manualmente su ChecBox... come potrei fare

    qui????
    codice:
            'aggiungo  i tre eventi dell'oggetto/controllo cui associare la funzionalità di ToolTipText
            AddHandler DirectCast(Oggetto, CheckBox).MouseHover, AddressOf TipText_MouseHover ' show
            AddHandler DirectCast(Oggetto, CheckBox).MouseLeave, AddressOf TipText_MouseLeave ' Hide
            AddHandler DirectCast(Oggetto, CheckBox).MouseMove, AddressOf TipText_MouseMove ' Posiziona
    
    
    grazie per l'aiuto
    Michele

  2. #2
    Ma scusa, il controllo ToolTip non ti andava bene?
    http://msdn.microsoft.com/en-us/libr...s.tooltip.aspx
    Chi non cerca trova.

  3. #3
    nooooo, non ero a conoscenza e pensare che già stavo pensando a trasformarla in classe

    e adesso ho pure risolto il problema che avevo postato

    comunque ho ovviato al problema così:
    codice:
            'aggiungo  i tre eventi dell'oggetto/controllo cui associare la funzionalità di ToolTipText
            AddHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseHover, AddressOf TipText_MouseHover ' show
            AddHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseLeave, AddressOf TipText_MouseLeave ' Hide
            AddHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseMove, AddressOf TipText_MouseMove ' Posiziona
    EDIT......


    ... adesso la mia sub l'ho evoluta e mi basta questo seplice comando per effettuare tutto insieme: creare, modificare ed eliminare il Popup con questa sola istruzione
    codice:
    Setta_ToolTipText_Event(imagepicturebox,"Doppio-Click per cambiare l'immagine")
    se non esiste la crea. se esiste cambia solo il messaggio. e infine se il parametro Messaggio è su Nothing, elimina l'associazione e quindi il pupup dal controllo (sono soddisfatto per adesso)...

    eccola quà la mia sub che fa tutto lei:
    codice:
        Sub Setta_ToolTipText_Event(ByVal Oggetto As System.Object, Optional ByVal Mess As String = Nothing)
    
            Dim TipText As Label = Oggetto.findform.controls("TipText_" & Oggetto.name)
    
            If String.IsNullOrWhiteSpace(Mess) Then ' ELIMINA
    
                If TipText Is Nothing Then Exit Sub ' non esiste
    
                'rimuovo  il collegamento ai tre eventi dell'oggetto/controllo cui sono associati
                RemoveHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseHover, AddressOf TipText_MouseHover ' show
                RemoveHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseLeave, AddressOf TipText_MouseLeave ' Hide
                RemoveHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseMove, AddressOf TipText_MouseMove ' Posiziona
    
                'rimuovo la label dal form cui appartiene
                Oggetto.findform.Controls.remove(TipText)
                TipText.Dispose()
    
            ElseIf TipText IsNot Nothing Then  ' MODIFICA MESSAGGIO
    
                TipText.Text = Mess
    
            Else 'CREA L'associazione perchè non esiste ancora
    
                'creo la label e la personalizzo simile al ToolTipText di default
                Dim NewTipText As New Label With {.Name = "TipText_" & Oggetto.name, .AutoSize = True, .BackColor = Color.WhiteSmoke,
                    .BorderStyle = BorderStyle.FixedSingle, .Enabled = False, .FlatStyle = FlatStyle.Popup, .Visible = False, .Text = Mess}
    
                'aggiungo la label al form cui appartiene
                Oggetto.findform.Controls.Add(NewTipText)
    
                'aggiungo  i tre eventi dell'oggetto/controllo cui associare la funzionalità di ToolTipText
                AddHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseHover, AddressOf TipText_MouseHover ' show
                AddHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseLeave, AddressOf TipText_MouseLeave ' Hide
                AddHandler DirectCast(Oggetto, System.Windows.Forms.Control).MouseMove, AddressOf TipText_MouseMove ' Posiziona
    
            End If
    
        End Sub
    ...........

    anche se ancora non capito come ottenere il cast puro della classe oggetto (textBox,ComboBox, etc..), potrebbe servirmi in futuro...
    Michele

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.