Newsgroup: it.comp.lang.visual-basic
Titolo: [VB2005] Istanziare controllo ActiveX da codice

Salve a tutti,
mi sono imbattuto in un problema che non riesco a risolvere.
Devo istanziare un controllo ocx che va poi caricato su un form.
Creo quindi il wrapper, poi cerco di caricarlo in questo modo:
Dim ControlloOCX As New AxBatch.AxucStart
MessageBox.Show(ControlloOCX.CtlText)
Quando va ad eseguire il messagebox, si solleva l'eccezione:
"Exception of type 
'System.Windows.Forms.AxHost+InvalidActiveXStateException' was thrown."
Se invece tento di caricarlo con l'IDE di VS (quindi sposto il controllo 
sul form) e faccio:
MessageBox.Show(AxucStart1.CtlText)
l'errore non c'ï¿œ e il valore viene visualizzato correttamente.
Qualcuno saprebbe darmi una mano?
Grazie,
Nicola

Aggiungo alcune informazioni.
Guardando nel designer del form, ho visto che vengono effettuate alcune 
operazioni che vado ad incollare:
<System.Diagnostics.DebuggerStepThrough()> _
     Private Sub InitializeComponent()
         Dim resources As System.ComponentModel.ComponentResourceManager 
= New System.ComponentModel.ComponentResourceManager(GetType(Form1))
Me.AxucStart1 = New AxBatch.AxucStart
CType(Me.AxucStart1, System.ComponentModel.ISupportInitialize).BeginInit()
[CUT]
'
'AxucStart1
'
Me.AxucStart1.Enabled = True
Me.AxucStart1.Location = New System.Drawing.Point(36, 76)
Me.AxucStart1.Name
 = "AxucStart1"
Me.AxucStart1.OcxState = 
CType(resources.GetObject("AxucStart1.OcxState"), 
System.Windows.Forms.AxHost.State)
Me.AxucStart1.Size = New System.Drawing.Size(320, 240)
Me.AxucStart1.TabIndex = 0
[CUT]
CType(Me.AxucStart1, System.ComponentModel.ISupportInitialize).EndInit()
Riproducendo le stesse istruzioni, nello stesso ordine, cambiando 
semplicemente tutti gli AxucStart1 con ControlloOCX, ottengo questo:
Dim resources As System.ComponentModel.ComponentResourceManager = New 
System.ComponentModel.ComponentResourceManager(GetType(Form1))
Dim ControlloOCX As New AxBatch.AxucStart
CType(ControlloOCX, System.ComponentModel.ISupportInitialize).BeginInit()
ControlloOCX.Enabled = True
ControlloOCX.Name = "ControlloOCX"
ControlloOCX.OcxState = 
CType(resources.GetObject("ControlloOCX.OcxState"), 
System.Windows.Forms.AxHost.State)
CType(ControlloOCX, System.ComponentModel.ISupportInitialize).EndInit()
MessageBox.Show(ControlloOCX.CtlText)
Da debug noto che l'istruzione 
resources.GetObject("ControlloOCX.OcxState") mi restituisce Nothing, da 
cui poi l'errore spiegato nel post precedente.
Sbaglio qualcosa ma non riesco a capire cosa...
Nicola

Ecco la soluzione!
Mancava un Me.Controls.Add(ControlloOCX).
Ecco come diventa il codice finale (semplifico per chi legge):
Public Class Form1
     Friend WithEvents ControlloOCX As New AxBatch.AxucStart
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
         ControlloOCX.Enabled = True
         ControlloOCX.Name = "ControlloOCX"
         Me.Controls.Add(ControlloOCX)
         MessageBox.Show(ControlloOCX.CtlText)
     End Sub
End Class

Niente, il problema si presenta di nuovo stamattina :-(
Nessuno che sappia darmi un aiuto? Ci sto sbattendo la testa senza successo.
Nicola

Nicola Ottomano wrote:

Potrebbe trattarsi di un problema di inizializzazione. Forse serve settare 
qualche altra proprietï¿œ prima di aggiungerlo ai controlli del form?
Hai provato a inizializzare il controllo *esattamente* come fa 
l'InitializeComponent()?
Intendo aggiungendo anche dimensioni, posizione e tutto il resto?
Magari manca una puttanata, che perï¿œ ï¿œ quella che fa lanciare l'eccezione.
Il controllo lo aggiungi al Load? Se sï¿œ potresti provare ad aspettare fino allo 
Shown, ma dubito che questo cambierï¿œ granchï¿œ.
Mi sembra piï¿œ probabile, come ho detto, un problema di inizializzazione del 
controllo. Non ci sono santi: se lo fa l'InitializeComponent() lo puoi fare 
anche tu, e *deve* funzionare.
-- 
S.

 puoi fare anche tu, e *deve* funzionare.
Le ho provate tutte.
Come vedi dal mio msg del 02/02 10.55, copio/incollo esattamente quello 
che c'ï¿œ nel form.designer, nello stesso ordine.
Nulla :-(
Anche perchï¿œ il problema ï¿œ dato dal fatto che questi controlli non devo 
inizializzarli per forza nel form_load, ma a comando dell'utente.
Nicola