24. februar 2004 - 20:45Der 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.
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
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.
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.
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?
Synes godt om
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.
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:
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?
Synes godt om
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
Private Sub Form_Load() frmSettings.txtNumDec.Text = 3 End Sub
Så den blvier sat når programmet starter.
Er et et problem?
Synes godt om
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
Synes godt om
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.
Jamen, det er ikke nødvendigt at den er tilgængelig i alle forms. Det er nok bare med med min frmSettings.
Synes godt om
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.
Synes godt om
Ny brugerNybegynder
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.