Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    203

    [VB.NET] Assegnare controllo da dll plugin

    Ciao a tutti,

    da qualche giorno sto sviluppando un applicazione che funziona con i plugin aggiuntivi...

    creo e assegno i controlli
    ad esempio textbox o button dalla dll plugin al programma pincipale
    con questo codice:

    codice:
    Codice della DLL
    
    Public Sub Start(ByVal MyForm As Object) Implements [Interface].Extension.Start
    
            
            Dim Button1 As New Button
    
            Button1.Location = New Point(87, 203)
            Button1.Size = New Size(75, 21)
            Button1.Text = "Button1 "
            Button1.Visible = True
            MyForm.Controls.Add(Button1)
    
    
        End Sub
    il mio problema sta adesso in quanto nel form del programma pincipale è presente
    un GroupBox e non riesco ad assegnare il Button1 alla GroupBox1

    ho provato così

    codice:
    Public Sub Start(ByVal MyForm As Object) Implements [Interface].Extension.Start
    
            
            Dim Button1 As New Button
    
            Button1.Location = New Point(87, 203)
            Button1.Size = New Size(75, 21)
            Button1.Text = "Button1 "
            Button1.Visible = True
            MyForm.GroupBox1.Controls.Add(Button1)
    
    
        End Sub
    ma appena faccio caricare la dll (plugin) al programma il tutto non funziona


    Sapreste aiutarmi ?

    Grazie in anticipo!

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    203
    Originariamente inviato da gibra
    Hai provato con Parent ?

    http://msdn.microsoft.com/en-us/libr...ol.parent.aspx

    gazie gibra x la risposta...
    ho dato una lettura

    ma se devo essere sincero...non so da dove cominciare

    potresti suggerirmi qualcosa ? grazie

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    203
    Originariamente inviato da gibra
    Basta impostare la proprietà Parent del nuovo Controllo.


    Ciao,

    sarò io stupido...ma non ci riesco...

    ho fatto sia così:

    codice:
            MyForm = Button1.Parent
            MyForm.GroupBox1.Controls.Add(Button1)
    che così

    codice:
            MyForm = MyForm.Parent
            MyForm.GroupBox1.Controls.Add(Button1)
    dove sbaglio?

    considera che sono ancora un principiante...autodidatta!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    203
    ho risolto così...
    non è realmente assegnato al groupbox ma funziona...

    che ne pensi ?

    codice:
            Button1.Parent = MyForm
            Button1.BringToFront()

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non vedo problemi.

    A me funziona in entrambi i modi:

    1)
    Me.GroupBox1.Controls.Add(Button1)

    2)
    Me.Controls.Add(Button1)
    Button1.Parent = GroupBox1


    Forse l'errore è dovuto ad altro...


  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    203
    Originariamente inviato da gibra
    Non vedo problemi.

    A me funziona in entrambi i modi:

    1)
    Me.GroupBox1.Controls.Add(Button1)

    2)
    Me.Controls.Add(Button1)
    Button1.Parent = GroupBox1


    Forse l'errore è dovuto ad altro...

    si probabile ma lo fai caricando la dll come plugin ?

    EDIT:

    c'è cmq qualcosa di strano
    perchè se provo per esempio a modificare il testo di TextBox1 dalla DLL (TextBox1 si trova nel programma principale)

    facendo
    codice:
    Public Sub Start(ByVal MyForm As Object) Implements [Interface].Extension.Start
    
            
          
            MyForm.TextBox1.Text = "Prova"
    
    
        End Sub
    appena carico la dll

    ricevo l'errore che allego:

    codice:
    ************** Testo dell'eccezione **************
    System.MissingMemberException: Impossibile trovare il membro pubblico 'TextBox1' nel tipo 'Form1'.
       in Microsoft.VisualBasic.CompilerServices.Symbols.Container.GetMembers(String& MemberName, Boolean ReportErrors)
       in Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean OptimisticSet, Boolean RValueBase, CallType CallType)
       in Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments)
       in WiFi.WiFi.Execute(Object MyForm)
       in Prg.Form1.PluginFinder(String Command)
       in Prg.Form1.Form1_Load(Object sender, EventArgs e)
       in System.EventHandler.Invoke(Object sender, EventArgs e)
       in System.Windows.Forms.Form.OnLoad(EventArgs e)
       in System.Windows.Forms.Form.OnCreateControl()
       in System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       in System.Windows.Forms.Control.CreateControl()
       in System.Windows.Forms.Control.WmShowWindow(Message& m)
       in System.Windows.Forms.Control.WndProc(Message& m)
       in System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       in System.Windows.Forms.ContainerControl.WndProc(Message& m)
       in System.Windows.Forms.Form.WmShowWindow(Message& m)
       in System.Windows.Forms.Form.WndProc(Message& m)
       in Prg.Form1.WndProc(Message& m)
       in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

  9. #9
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da S0nic
    si probabile ma lo fai caricando la dll come plugin ?
    puoi fare in 2 modi (almeno che mi vengono in mente subito) :

    1)
    esegui un cast al tipo (tuoForm) che contiene la proprietà (o campo *PUBLIC) GroupBox1 e fai .Controls.Add(button1) da li, ma in questo caso dovresti importare nell'interfaccia comune (Extension che poi forse dovresti chiamare IExtension...) il tipo (tuoForm) di base contenente già GroupBox1 (oppure un'interfaccia), ma a questo punto non capisco perchè in Start non passi direttamente il tipo base (o interfaccia) anzichè object

    2)
    fai cast al tipo Form (base) e usi .Controls.Find("GroupBox1",true) per trovare il GroupBox1 e poi aggiungi il bottone (sempre con .Controls.Add(button1))


    ma facendo così, non diventa poi un po complesso gestire la grafica?



    EDIT :
    *PUBLIC

  10. #10
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    adesso non ricordo se in vb.net sia uguale, ma se tu crei un interfaccia con le proprietà del tuo form (GroupBox o Control ecc.) nella dll dell'interfaccia comune (esempio IPropertyForm), potresti passare nel parametro di Start appunto questa interfaccia (IpropertyForm), senza dover fare cast al tipo form, tanto comunque importi nei plugin la dll comune... ovviamente poi il tuo form deve ereditare da quella interfaccia.

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.