Avatar billede bernhof Nybegynder
27. juni 2003 - 15:16 Der er 18 kommentarer og
1 løsning

Noget så simpelt som

Jeg er tidligere Visual Basic 6 programmør og er igang med at sætte mig ind i VB .NET.

Jeg vil nu noget så simpelt som at ændre Text-egenskaben for en Button control på en Form1 (der allerede er loadet) fra et modul, men jeg kan ikke referere til Form1.Button1.Text fra modulet .. Den siger at "A reference to a non-shared member requires an object reference". Hvad skal jeg gøre?
Avatar billede ferdinand.k Mester
27. juni 2003 - 15:26 #1
det er ikke fordi den ikke er public?
Avatar billede ferdinand.k Mester
27. juni 2003 - 15:27 #2
ellers kan du vel gøre det med me.button1.text istedet for form1?! ved ikke om det er det, men gi det et forsøg...
Avatar billede bernhof Nybegynder
27. juni 2003 - 15:47 #3
Jeg kan ikke benytte "Me", da referencen, som beskrevet, udføres i et modul og ikke i formens egen kode.

.. hvad er ikke public?
Avatar billede ferdinand.k Mester
27. juni 2003 - 15:50 #4
private?!
Avatar billede ferdinand.k Mester
27. juni 2003 - 15:51 #5
nå, du mener.. ok...

det er ikke fordi den variable du fprsøger at tilgå er privat, og ikke deffineret som en public...
Avatar billede bernhof Nybegynder
27. juni 2003 - 15:58 #6
Ok, hvordan gør jeg så denne knap Public, så jeg kan tilgå dens egenskaber fra modulet?
Avatar billede ferdinand.k Mester
27. juni 2003 - 16:09 #7
det er metoden du skal gøre public, hvis det er der problemet ligger....
Avatar billede driis Nybegynder
27. juni 2003 - 16:24 #8
Dine buttons er per default private medlemmer af din Form. Jeg er faktisk ikke sikker på, om du kan lave om på det. Men du kan lave en workaround ved at give din funktion en reference til knappen med, f.eks. sådan her:

Public Function txtChange(ByRef obj As Object) As Boolean
        obj.Text = "Noget nyt tekst"
        txtChange = True
End Function

Og så kalde funktionen således:

txtChange(Button1)

Bemærk at jeg har defineret 'obj' som Object, på den måde kan du også sende andet end knapper med til txtChange funktionen - så længe det medsendte objekt bare har et Text medlem.
Avatar billede driis Nybegynder
27. juni 2003 - 16:27 #9
Jeg har lige hittet ud af hvordan du gør din knap public :
Vælg properties for din knap. Under design er en værdi, der hedder "Modifiers". Her kan du vælge public, så kan du tilgå din knap sådan som du ønsker. ( Form1.Button1.Text )
Avatar billede driis Nybegynder
27. juni 2003 - 16:28 #10
... men at gøre knappen public bryder selvfølgelig lidt med dataindkapslingsprincippet og den objekt orienterede tankegang. Men du ved bedst selv hvad det skal bruges til, og hvilken løsning, der vil være den bedste.
Avatar billede ferdinand.k Mester
27. juni 2003 - 16:31 #11
jeg tror ikke at han ønsker at gøre knappen public, men bare at kunne tilgå en funktion gennem denne knap. det jeg mente han kunne gøre, var at gøre funktionen public, således at den kunne tilgås andre steder...?!
Avatar billede driis Nybegynder
27. juni 2003 - 16:38 #12
Det, der er humlen i det, er at man i VB .NET ikke kan tilgå en Buttons metoder fra et andet modul, fordi knappen per default er Private eller Friend. For at mikbj kan tilgå Form1.Button1.Text fra hans funktion i et andet modul, skal knappen være public - eller også skal han sende en reference til knappen med til funktionen, som skrevet herover.
Avatar billede bernhof Nybegynder
27. juni 2003 - 20:25 #13
Hmm .. Jeg kan ikke tilgå Form1.Button1.Text selvom jeg sætter Modifiers = Public.
Jeg kan ikke engang udføre en hjemmelavet Public Sub SetInfo() vha. Form1.SetInfo() .. (Sub'en ligger selvf. i formens egen kode) ...

Skal jeg gøre noget ved formen også?
Avatar billede bernhof Nybegynder
27. juni 2003 - 20:28 #14
udføre = kalde (og det skal selvf. nævnes at dette kald også foregår i modulet)
Avatar billede driis Nybegynder
28. juni 2003 - 00:40 #15
hmm, jeg må ærligt indrømme, at jeg postede mit andet svar uden at teste det først - gik blot ud fra, at det var sådan.
Avatar billede bernhof Nybegynder
28. juni 2003 - 02:43 #16
Ok .. Det kan vel ikke være rigtigt at man skal lave diverse workarounds og snørklet kode bare for at tilgå et objekts egenskaber? .NET må da være smartere indrettet end det :o)
Avatar billede vaabenhus Nybegynder
09. juli 2003 - 18:01 #17
Du kan lave en public reference til den aktive instans af formen og kalde alt der er på formen via den. Det er ikke andet end 2 små linier :)

Public Form1Ref as Form1 (Klask det i et modul eller lign...)

i formens "Windows Form Designer generated code" som der står, skriver du, lige før dens kald til InitializeComponent():

Form1Ref = Me

Så har du adgang til Formen og dens button1 fra alle steder igennem Form1Ref

Håber det kan bruges :)

- Vaab
Avatar billede bernhof Nybegynder
12. juli 2003 - 03:04 #18
Jeg prøver dit forslag snarest muligt! :o) Tak for respons!
Avatar billede bernhof Nybegynder
06. september 2004 - 13:09 #19
vaabenhus - det var derhenad:

Class Module1
    Public Sub Test()
        Dim f as New Form1
        f.Button1.Text = ""
    End Sub
End Module

Du får point!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester