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 - Handle di un controllo alla finestra
Forum - C# / VB.NET - Handle di un controllo alla finestra

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Salve,
Sto utilizzando un controllo esterno che importo tramite una sua libreria.
L'ho inserito nel Designer della finestra in cui lo voglio mettere, ma non appare e se cerco di chiamare un suo metodo mi dice di impostare l'Handle alla finestra.
Ma Handle e ReadOnly!

Mi sapreste spiegare come fare o magari cos'è l'Handle e dove viene impostato?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:17
Venerdì, 18/02/2011

posta il codice, così servirebbe una sfera di cristallo.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:35
Venerdì, 18/02/2011
Nel Designer, oltre a quello che genera VS aggiungo queste righe:
Codice sorgente - presumibilmente VB.NET

  1. Friend WithEvents Browser As GeckoWebBrowser
  2. 'altro codice autogenerato
  3. '
  4. 'Browser
  5. '
  6. Me.Browser.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
  7.                     Or System.Windows.Forms.AnchorStyles.Left) _
  8.                     Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
  9.         Me.Browser.Location = New System.Drawing.Point(0, 85)
  10.         Me.Browser.Name = "Browser"
  11.         Me.Browser.Size = New System.Drawing.Size(706, 277)
  12.         Me.Browser.TabIndex = 4
  13.         Me.Browser.Visible = True



Per inizializzare, uso una libreria (quella in cui è contenuto il controllo),
scaricabile qui -> http://code.google.com/p/geckofx/wiki/GettingStarted
E poi utilizzo XULRunner, che scarico qui -> http://sourceforge.net/projects/xulrunnerinstal/files/XULR ...

Una volta scaricato e copiato nella cartella GeckoFX, sottocartella di quella in cui si trova la mia app, aggiungo un handler dell'evento StartUp dell'applicazione (file Application.Designer.vb)
Codice sorgente - presumibilmente VB.NET

  1. Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
  2.             Skybound.Gecko.Xpcom.Initialize(My.Computer.FileSystem.CurrentDirectory & "\" & "GeckoFX\Mozilla XULRunner")
  3.         End Sub


Che mi inizializza la libreria.

Ora se io avvio l'applicazione va tutto bene, ma non mi visualizza il controllo. Se poi io premo faccio chiamare un metodo del controllo (ad es al click di un pulsante) mi lancia la seguente eccezione:
"Cannot call Navigate() before the window handle is created."

Window handle? Che è? E dove lo creo? Poichè il codice che uso per inizializzare il controllo è uguale a quello di tutti gli altri, non dovrebbe avere già un handle?

PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 16:33
Venerdì, 18/02/2011
Avendo lavorato con il controllo GeckoWebBrowser, io per inizializzarlo carico la libreria direttamente nell'evento Form_Load
con questo codice:
Codice sorgente - presumibilmente VB.NET

  1. 'Lo dichiaro
  2.         Public WithEvents web As New GeckoWebBrowser
  3.         'Nell'evento
  4.         Xpcom.Initialize(My.Application.Info.DirectoryPath & "\xulrunner")
  5.         web.Dock = DockStyle.Fill
  6.         tabvista.Controls.Add(web) 'tabvista è un tabControl
  7.         web.Visible = True


e nient'altro

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 8:09
Sabato, 19/02/2011
Testo quotato


io per inizializzarlo carico la libreria direttamente nell'evento Form_Load


Secondo voi è lì che si crea (o assegna) l'Handle?
Da quello che ho capito girando un po' per Google, l'Handle è un numero che contraddistingue ogni finestra o ogni applicazione ed è assegnato dal OS.
Ho messo nel Load del form:
Codice sorgente - presumibilmente VB.NET

  1. Skybound.Gecko.Xpcom.Initialize(My.Computer.FileSystem.CurrentDirectory & "\" & "GeckoFX\Mozilla XULRunner")
  2. Me.Browser.Anchor = CType((((AnchorStyles.Top Or AnchorStyles.Bottom) Or AnchorStyles.Left) Or AnchorStyles.Right), AnchorStyles)
  3.         Me.Browser.Location = New System.Drawing.Point(0, 85)
  4.         Me.Browser.Name = "Browser"
  5.         Me.Browser.Size = New System.Drawing.Size(706, 277)
  6.         Me.Browser.TabIndex = 4
  7.         Me.Browser.Visible = True


E prima lo ho dichiarato:
Codice sorgente - presumibilmente VB.NET

  1. Public WithEvents Browser As New GeckoWebBrowser


Ma non funziona comunque: stesso errore.

Grazie Walker93 e HeDo per la risposta =)

Ultima modifica effettuata da il 19/02/2011 alle 8:16
PM Quote