Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Accesso ai controlli Form da una Public Shared Function oppure aggiustare un AddressOf
Forum - C# / VB.NET - Accesso ai controlli Form da una Public Shared Function oppure aggiustare un AddressOf

Avatar
dylan666 (Normal User)
Pro


Messaggi: 103
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 1:20
Martedì, 07/05/2019
Salve a tutti, mi trovo a "smanettare" un codice in VB.Net che secondo me è un porting maldestro di uno in C#.
Il codice è preso da un esempio basato su una libreria proprietaria ed è formato da un modulo (Module1) e un Form (Form1).
Nel modulo ad un certo punto c'è questa riga:

Codice sorgente - presumibilmente Plain Text

  1. MyDelegateFunc = (AddressOf Form1.MyCallBack)



Per poterlo fare funzionare (dato che durante la compilazione ricevevo un errore) ho dovuto aggiungere "Shared" a MyCallBack che era una funzione solo "Public" del Public Class Form1.

Il problema è che quella funzione agiva su dei controlli del form (es. Button1.Visible = False) che adesso non funzionano più.
Ho provato con questa soluzione:

Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Public Shared f as Form1
  3.  
  4.     Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  5.        f = Me
  6.     End Sub
  7. End Class



Ma per accedere ad esempio a Form1.f.Button1.Visible = False ho dovuto mettere anche Me.CheckForIllegalCrossThreadCalls = False
Esiste un'altra soluzione?
Sia chiaro che a me va bene sia togliere lo Shared alla funzione (purché l'AddressOf richiamato da modulo vada a buon fine) che mantenerlo come è ora ma riuscire a interagire con i controlli dei form.

Grazie anticipatamente a chi vorrà aiutarmi e per favore postate qualche esempio perché sono alle prime armi ;)


10101
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1932
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:26
Mercoledì, 08/05/2019
Senza il codice del C# non posso aiutarti molto.

Il cross Thread exception avviene quando un oggetto viene manipolato da un Thread e lo stesso in un'altro contesto.

Altrimenti và aggiunto un Invoke delegate per agire sul controllo.

alla tua funzione shared ho i miei dubbi.

Normalmente una classe astratta viene incapsulata con il metodo Inherits.

ad esempo

C#

Codice sorgente - presumibilmente C# / VB.NET

  1. public class Form1 : AltraClasse
  2. {
  3.      //ToDo  
  4. }




Vb
Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1 Inherits AltraClasse
  2.  
  3. 'ToDo
  4.  
  5. End Class



Senza il codice sorgente della classe più di questo non posso dirti.


PM Quote