Avatar billede dennism Nybegynder
24. februar 2004 - 20:45 Der er 25 kommentarer og
3 løsninger

VB: Menu; vis nyt vindue

Jeg er nybegynder indenfor VB programmering, og sidder nu og forsøger at lave mit første program - er måske startet lidt i det store, men lidt udfordring er vel ikke ad vejen.

Jeg har en form kaldet "frmMain", og et form kaldet "frmSettings".
Jeg har så lavet et menu i "frmMain", hvor jeg har en menu der hedder MenuSettings. Når jeg vælger denne menu, vil jeg gerne have at mit "frmSettings"-vindue kommer frem, sådan at man kan ændre indstillingerne.

Hvordan klarer jeg dette?
Avatar billede talant Nybegynder
24. februar 2004 - 20:50 #1
jeg er selv lige startet med VB, og kender ikke rigtig menu kontrollerne.. men, et eller andet sted kan jeg forstille mig at du skal skrive noget kode når du klikker på en bestemt menu..

frmSettings.show

vil vise frmsettings formen..

frmSettings.hide

vil skjule den igen.

Håber du ved hvor koden skal stå henne, for det ved jeg ikke helt :S
Avatar billede dennism Nybegynder
24. februar 2004 - 20:51 #2
Hvad med dette istedet:

            frmSettings.Visible = True

!? Er lidt i tvivl om det er den rigtige metode?
Avatar billede talant Nybegynder
24. februar 2004 - 21:00 #3
nu har jeg prøvet både

  frmsettings.show

og

  frmsetting.visible = true

men i cmdbuttons og ikke menuer.. begge to virker tilsyneladende ens..

der er nok en forskel, muligvis med at frmsettings stadig er aktiv, hvis visible = false.. men jeg skal ikke kunne sige det!
Avatar billede dennism Nybegynder
24. februar 2004 - 21:14 #4
Smider ud lige et svar?

Kan du iøvrigt fortælle mig hvad der er galt her:

    Dim NumDec As Integer
    NumDec = txtNumDec
Avatar billede Slettet bruger
24. februar 2004 - 21:21 #5
Dim NumDec As Integer
    NumDec = CInt(txtNumDec.text)
Avatar billede dennism Nybegynder
24. februar 2004 - 21:21 #6
Hvorfor CInt?
Avatar billede Slettet bruger
24. februar 2004 - 21:22 #7
Fordi du erklærer din variabel som en integer og det du tager fra tekstfeltet er en streng så du er nødt til at "sige" at strengen skal laves om til en integer.
Avatar billede dennism Nybegynder
24. februar 2004 - 21:23 #8
Jeg får en fejl der siger:
Type mismatch
Avatar billede Slettet bruger
24. februar 2004 - 21:27 #9
Er txtNumDec ikke et felt på formen? Hvad fylder du i det? Og hvornår/hvor bruger du ovenstående kode?
Avatar billede talant Nybegynder
24. februar 2004 - 21:28 #10
svar:

  frmsettings.show
eller
  frmsetting.visible = true

Integer kan kun 'holde på' tal.. Cint gemmer tallene i din txtNumDec.text som Integer istedet for som String
Avatar billede dennism Nybegynder
24. februar 2004 - 21:30 #11
Sådan her:

Private Sub Form_Load()
    Dim NumDec As Integer
    NumDec = CInt(txtNumDec.Text)
End Sub

Den bliver altså kørt, når frmSettings åbnes. Min mening med det, er at hvis nu folk ændrer værdien i txtNumDec mens de er på siden, så skal jeg jo have sådan at jeg kan genskabe den værdi som var inden de åbnede frmSettings hvis nu de trykker annuller.
Avatar billede dennism Nybegynder
24. februar 2004 - 21:40 #12
Forstår I hvad jeg vil?
Avatar billede Slettet bruger
24. februar 2004 - 21:58 #13
Private Sub Form_Load()
    Dim NumDec As Integer
    if txtnumdex.text <> "" Then
      NumDec = CInt(txtNumDec.Text)
    end if
End Sub
Avatar billede dennism Nybegynder
24. februar 2004 - 22:16 #14
Jeg kører så følgende når man trykker annuller:

Private Sub cmdCancel_Click()
    txtNumDec.Text = CInt(NumDec)
    frmSettings.Hide
End Sub

Men det resulterer i t txtNumDec.text får værdien 0. Hvordan kan det være?
Avatar billede Slettet bruger
24. februar 2004 - 22:20 #15
Det er fordi du erklærer den i form load, fjern dim linien derfra og smid den helt op i toppen af din kode så vil den gælde for hele formen. Hvis den skal gælde for slle dine forms så skal du tilføje et modul isteder hvor du så laver en
Public NumDec as Integer
så kan du bruge den fra alle dine forms.
Avatar billede dennism Nybegynder
24. februar 2004 - 22:30 #16
Ja, jeg erklærer den i min form load, men jeg forstår ikke helt hvor du vil have at jeg skal erklære den istedet?
Avatar billede Slettet bruger
24. februar 2004 - 22:39 #17
Helt i toppen som det første, altså uden for dine funktioner.

Public NumDec as Integer

Private Form_Load
.
.
End Sub
Avatar billede dennism Nybegynder
25. februar 2004 - 07:14 #18
Oki. Men hvilket forskel gør det?
Avatar billede martin_moth Mester
25. februar 2004 - 10:01 #19
Erklærer du en variabel inden i en sub - fx. i Form_Load, er variablen KUN synlig i denne sub.

Og her er det let at lave fejl, så pas på:

Hvis du erklærer en variabel med navnet "Hej" i fx. FormLoad, og giver den en værdi, og bruger du så variablen Hej i en anden sub, opretter VB en NY TOM variabel med navn "Hej". Så du tror at Hej indeholder en værdi, du har sat i Form_Load, men det gør den KUN inden for denne sub.

Du undgår alt dette ved at KRÆVE, at alle variabler skal dimmes. Dvs. VB giver dig en fejlmeddelse om, at variablen Hej ikke er defineret hvis du prøver at bruge den et sted hvor den ikke skal bruges, i stedet for at oprette en tom variabel.

Under Options et sted hakker du af i "Require Variable Declarations"

Og tag at læs følgende - det er helt nødvendigt, at du forstår hvad der står der:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconunderstandingscopeofvariables.asp
Avatar billede dennism Nybegynder
25. februar 2004 - 15:36 #20
Det fungerer stadig ikke helt korrekt:

    Dim NumDec As Integer

Private Sub Form_Load()
        If txtNumDec.Text <> "" Then
            NumDec = CInt(txtNumDec.Text)
        End If
End Sub
Private Sub cmdCancel_Click()
    txtNumDec.Text = NumDec
    frmSettings.Hide
End Sub

Det er min kode. txtNumDec er fra start 3. Men hvis jeg gør ind i min frmSettings og trykker på annuller (cmdCancel), så bliver den stadig ændret til 0. Hvordan kan det være?
Avatar billede Slettet bruger
25. februar 2004 - 17:34 #21
Prøv
Public NumDec As Integer

Private Sub Form_Load()
        If txtNumDec.Text <> "" Then
            NumDec = CInt(txtNumDec.Text)
        End If
End Sub
Private Sub cmdCancel_Click()
    txtNumDec.Text = NumDec
    frmSettings.Hide
End Sub
Avatar billede dennism Nybegynder
25. februar 2004 - 20:10 #22
Jeg har nu ændret lidt:
________________________________________
Public NumDec As Integer
 
Private Sub Form_Load()
            NumDec = CInt(txtNumDec.Text)
End Sub

Private Sub cmdCancel_Click()
    txtNumDec.Text = NumDec
    frmSettings.Hide
End Sub
________________________________________

Men jeg får en fejl i denne linie:
            NumDec = CInt(txtNumDec.Text)

Hvad er problemet der?
Avatar billede Slettet bruger
25. februar 2004 - 20:38 #23
Kan være at txtNumDec ikke er loadet før form load er færdig, hvordan sætter du noget ind i den?
Avatar billede dennism Nybegynder
25. februar 2004 - 20:44 #24
I min frmMain har jeg:

Private Sub Form_Load()
    frmSettings.txtNumDec.Text = 3
End Sub

Så den blvier sat når programmet starter.

Er et et problem?
Avatar billede Slettet bruger
25. februar 2004 - 20:56 #25
Nu kan jeg ikke huske rækkefølgen helt, men når du kalder frmSettings.txtNumDec.Text = 3 bliver form load også udført for frmSettings. Jeg vil anbefale dig at styre det fra frmMain istedet, flyt
Public NumDec As Integer til et modul og så sæt den i frmMain

Private Sub Form_Load()
  NumDec = 3 
  frmSettings.txtNumDec.Text = 3
End Sub

Så vil nedenstående stadig virke og du behøver ikke at sætte noget i form load i frmSettings.

Private Sub cmdCancel_Click()
    txtNumDec.Text = NumDec
    frmSettings.Hide
End Sub
Avatar billede Slettet bruger
25. februar 2004 - 20:57 #26
Ved at flytte NumDec til et modul opnår du at den bliver tilgængelig fra alle dine forms da et modul er globalt.
Avatar billede dennism Nybegynder
25. februar 2004 - 20:59 #27
Jamen, det er ikke nødvendigt at den er tilgængelig i alle forms. Det er nok bare med med min frmSettings.
Avatar billede Slettet bruger
25. februar 2004 - 21:07 #28
Så har jeg kun et forslag tilbage og det er at flytte frmSettings.txtNumDec.Text = 3
til Form_Activate istedet.
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