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

    [vb.net]Come trasferire dati tra Usercontrols

    Salve, come posso passare dei dati tra user controls?


    form1 contiene Usercontrol1 e form2 contiene usercontrol2.


    Entrambi gli usercontrols hanno la grandezza dei rispettivi form.


    Con usercontrol1 estraggo un link con l'oggetto webbrowser che vorrei trasferire nell'usercontrol2.


    Stavo pensando di creare delle funzioni pubbliche in Usercontrol1 a cui posso accedere dall'usercontrol2.


    Ma questo è facile da dire in teoria e poco nella pratica. .Almeno per quanto riguarda la mia "esperienza"...


    Per esempio, questo codice è in usercontrol2, crea un'immagine qr. Il problema però sta nel fatto che il link che mi serve trasformare in qr viene estratto da usercontrol1, dunque mi serve "comunicare" tra gli usercontrols.
    codice:
     Dim sitoGoogleQrCode As String = "http://chart.googleapis.com/chart?chs={WIDTH}x{HEIGHT}&cht=qr&chl={TESTO}"
    
    
                sitoGoogleQrCode = sitoGoogleQrCode.Replace("{WIDTH}", PictureBox1.Width.ToString()).Replace("{HEIGHT}", PictureBox1.Height.ToString()).Replace("{TESTO}", WebUtility.UrlEncode(USERCONTROL1.LINKDAESTRARRE..))
                Dim client As WebClient = New WebClient()
    
    
                Dim bytes As Byte() = client.DownloadData(sitoGoogleQrCode)
                client.Dispose()
                Dim memStream As MemoryStream = New MemoryStream(bytes)
                Dim bmpQrCode As Bitmap = New Bitmap(memStream)
                PictureBox1.Image = bmpQrCode

    O per esempio In usercontrol1 ho una sub che estrae con un webclient il titolo della pagina di un sito e voglio che questa stringa venga aggiunta alla listbox in Usercontrol2. Sarebbe fattibile?


    Qualche dubbio..


    Dovrei usare delle funzioni per restituire il valore di quello che avviene all'interno delle sub? Se si, come potrei fare?


    Inoltre.. sarebbe possibile comunicare dati tra usercontrols anche quando uno di loro è chiuso?
    Per esempio, se usercontrol1 estrae 100 titoli da inserire in teoria come nuovi items in listbox in usercontrol2, ma quest'ultimo non è stato ancora aperto, dovrei lasciare effettivamente l'usercontrol2 sempre aperto in mostra??


    Vi ringrazio in anticipo


    Mattia

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ...

    I controlli devono avere delle proprietà (in lettura/scrittura) o dei metodi (che accettano argomenti opportuni) che puoi utilizzare per

    a) ottenere in una stringa la url dalla proprietà dell'oggetto 1

    b) passare tale stringa tramite opportuna proprietà dell'oggetto 2
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Salve Antonio, innanzitutto grazie per la tua risposta. E' un onore per me ricevere una risposta da te.
    Un esempio lampante che mi viene in testa sarebbe:
    codice:
    Public Class Form1
    
        Public Shared link_url As String
    
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
    
            UserControl1.WebBrowser1.Navigate("https://www.google.com/ ")
    
    
        End Sub
    
    
        Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
    
    
            link_url = UserControl1.WebBrowser1.Document.Links(1).GetAttribute("href")
    
    
            Dim frm As New Form2
    
    
            frm.Show()
    
    
        End Sub
    
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
    
            AddHandler UserControl1.WebBrowser1.DocumentCompleted, AddressOf WebBrowser1_DocumentCompleted
    
    
        End Sub
    
    
    End Class
    e in form2:
    codice:
    PublicClassForm2
        PrivateSubForm2_Load(sender AsObject, e AsEventArgs)HandlesMyBase.Load
    
            UserControl2.Label1.Text=Form1.link_url
    
        EndSub
     EndClass
    ma sono esempi abbastanza "terra terra" o forse sono io che mi sto perdendo in un bicchier d'acqua.
    Non capisco perchè non posso eseguire il tutto direttamente tramite usercontrols tipo:
    codice:
    Public Class Usercontrol1
    
        Public Shared link_url As String
    
    
    
    
        Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
    
    
             Try
                
                Dim collection As HtmlElementCollection = WebBrowser1.Document.All
    
    
                For Each element As HtmlElement In collection
                    If element.TagName = "A" Then
                        link_url = element.GetAttribute("HREF")
                        If link_url.Length > 70 Then
                            link_url= link_url.ToString.Replace(" - YouTube", "")
                            Label2.Text = "Creating Download - Step 1/4"
                        End If
                    End If
                Next
        End Sub
    End Class
    Mentre in Usercontrol2:
    codice:
    Dim sitoGoogleQrCode As String = "http://chart.googleapis.com/chart?chs={WIDTH}x{HEIGHT}&cht=qr&chl={TESTO}"            sitoGoogleQrCode = sitoGoogleQrCode.Replace("{WIDTH}", PictureBox1.Width.ToString()).Replace("{HEIGHT}", PictureBox1.Height.ToString()).Replace("{TESTO}", WebUtility.UrlEncode(usercontrol1.link_url))
                Dim client As WebClient = New WebClient()
    
    
                Dim bytes As Byte() = client.DownloadData(sitoGoogleQrCode)
                client.Dispose()
                Dim memStream As MemoryStream = New MemoryStream(bytes)
                Dim bmpQrCode As Bitmap = New Bitmap(memStream)
                PictureBox1.Image = bmpQrCode
                usercontrol1.Label2.Text = "Creating QR - Step 2/4"
    Dove sta il mio errore? Sarebbe impossibile trasferire dati da usercontrols senza passare tramite i rispettivi forms prima?
    Sto leggendo online tantissimi esempi.. Dal set & get, alle variabili publiche e per finire adesso sto provando a creare un modulo che posso richiamare in ogni form, senza tante dichiarazioni.. Qualsiasi consiglio è accetto.
    Ti ringrazio,
    Mattia

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non fare mille tentativi. Usa get set come ti proponevo e come è giusto. Lascia stare i tutorial online, se vuoi imparare dedica tempo ad un buon libro.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    io, generalmente, uso my.settings.nomestring

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Manu... i Settings non c'entrano nulla nella questione
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.