03. september 2003 - 14:14Der er
25 kommentarer og 2 løsninger
Hvorfor virker dette program/denne kode ikke efter hensigten
Jeg sidder her og arbejder på et program som i sin oprindelse hedder liv (minder lidt om minestryger)
Jeg har oprettet en form hvor jeg har en knap ved navn start (command1) samt en label (lblfelt) som udgør felterne.
meningen med programmet: -De otte felter omkring et givet felt kaldes feltets naboer -En brik, som har to eller tre nabobrikker overlever til næste generation. -En brik, som har fire eller flere naboer, dør på grund af overbefolkning og bliver fjernet. -En hver brik som kun har én nabo, dør af mangel på støtter. -I et hvert tomt felt, som har tre – og kun tre- naboer, sker der en fødsel og der placeres en brik i næste generation.
koden Dim hvid, sort As Long Const bredde = 10 Private Sub Command1_Click() If Command1.Caption = "start" Then Command1.Caption = "Stop" Do While Command1.Caption = "Stop" 'Generation DoEvents Loop Else Command1.Caption = "Start" End If End Sub Private Sub Form_Load() Dim lodret, vandret, feltID As Integer hvid = RGB(255, 255, 128) sort = RGB(0, 128, 0) For lodret = 1 To bredde For vandret = 1 To bredde feltID = (lodret * bredde) + vandret Load lblFelt(feltID) lblFelt(feltID).Move lodret * _ lblFelt(feltID).Width, _ vandret * lblFelt(feltID).Height lblFelt(feltID).BackColor = sort lblFelt(feltID).Tag = False lblFelt(feltID).Visible = True Next Next End Sub
Private Sub lblFelt_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then 'Venstre Knap lblFelt(Index).BackColor = hvid lblFelt(Index).Tag = True End If If Button = 2 Then 'Højre knap lblFelt(Index).BackColor = sort lblFelt(Index).Tag = False End If End Sub
Function FeltOverlever(lblID As Integer) 'Funktion header Dim AntalLevendeNaboer As Integer Dim ILiveNu As Integer ILiveNu = lblFelt(lblID).Tag = True AntalLevendeNaboer = 0 ' Test de felter ovenover If lblFelt(lblID - (bredde + 1)).Tag = True Then _ AntalLevendeNaboer = AntalLevendeNaboer + 1 If lblFelt(lblID - brede).Tag = True Then _ AntalLevendeNaboer = AntalLevendeNaboer + 1 If lblFelt(lblID - (bredde - 1)).Tag = True Then _ AntalLevendeNaboer = AntalLevendeNaboer + 1 ' Test de to felter på hver sin side af det aktuelle felt If lblFelt(lblID - 1).Tag = True Then _ AntalLevendeNaboer = AntalLevendeNaboer + 1 If lblFelt(lblID + 1).Tag = True Then _ AntalLevendeNaboer = AntalLevendeNaboer + 1 ' Test de tre felter nedenunder If lblFelt(lblID + (bredde - 1)).Tag = True Then _ AntalLevendeNaboer = AntalLevendeNaboer + 1 If lblFelt(lblID + bredde).Tag = True Then _ AntalLevendeNaboer = AntalLevendeNaboer + 1 If lblFelt(lblID + (bredde + 1)).Tag = True Then _ AntalLevendeNaboer = AntalLevendeNaboer + 1 'Funktion Retunerer True eller False FeltOverlever = (ILiveNu And _ ((AntalLevendeNaboer = 2) _ Or (AnmtaslLevendeNaboer = 3))) _ Or ((Not ILiveNu) And (AntalLevendeNaboer = 3)) End Function Private Sub Generarion() Dim lodret, vandret, feltID As Integer 'Tegn overlevende felter For lodret = 2 To (bredde - 1) For vandret = 2 To (bredde - 1) feltID = (lodret * bredde) + vandret lblFelt(feltID).BackColor = _ IIf(FeltOverlever(feltID), hvid, sort) Next Next 'opdater True-properties For lodret = 2 To (bredde - 1) For vandret = 2 To (bredde - 1) feltID = (lodret * brede) + vandret lblFelt(feltID).Tag = _ IIf(FeltOverlever(feltID).BackColor = hvid, True, False) Next Next End Sub
det er så meningen at man starter programmet tegner (markerer) et mønster af firkanter og så trykker man på start knappen for at se hvad der sker. MEN HVORFOR SKER DER IKKE NOGET?????
Private Sub Command1_Click() If Command1.Caption = "start" Then Command1.Caption = "Stop" Do While Command1.Caption = "Stop" 'Generation DoEvents Loop Else Command1.Caption = "Start" End If End Sub
er den komplette implementation af knappens klik-event, kan jeg godt forstå det. Du beder bare programmet om at lade andre programmer komme til. Dit program udfører ikke noget.
når jeg nu kører programmet ser det ud til at virke men jeg får en fejlmeddelelse med følgende: Run-time Error "340": Control array element '2' dons't exist
I koden er det under følgende del af koden: Function FeltOverlever
Følgende linie er markeret ILiveNu = lblFelt(lblID).Tag = True
Kræv variabelerklæring (et sted under options). Så vil VB brokke sig når du bruger et variabelnavn, der ikke er erklæret (dvs. hvis du staver forkert...
Eller hav variabelnavne og procedurenavne indeholode et stort bogstav - og når du koder, skriver du med småt. Hvis VB ikke retter til stort, er det fordi den ikke kan genkende variablen/proceduren, og så ved du der er noget galt...
Prøv at skrive Option Explicit allerøverst i din kode, som foreslået 2 gange af vbcoder! Se hvordan VB derefter brokker sig over de linier, hvor der står brede i stedet for bredde.
Et sidste spørgsmål- for nu funker det, men er det meningen at man kun kan aktivere/køre programmet en gang før at det helt! skal stoppes og så skartes igen for at man kan køre det?
Kort sakt, det jeg mener er, at når jeg har markeret x felter og trykker på start knappen så kører den programmet og start knappen er blevet til en stop knap og for at marekere felter igen, trykker jeg på stopknappen, som bliver til startknap og jeg kan markere felter igen, men nu skulle jeg jo kunne få programmet til at køre igen ved at trykke på startknappen men NEJ.
Sjh>> mit virker stort se også som dit jeg har bare det problem at jeg kun kan trykke 1 gang på (i dit program generate knappen) som hos mig er stat knappen
kan desværre ikke se din program kode så jeg lige kunne få rette den irriterende og sidste fejl
Stavefejl igen: if Command1.Caption = "start" skal være: if Command1.Caption = "Start" Et godt råd: Gør sådan her: if lcase(Command1.Caption) = "start" eller lignende i alle streng-sammenlignende if sætninger i dine programmer, det letter dete MEGET, når programmerne bliver mere komplicerede. lcase() og ucase() laver en streng om til hhv. små eller store bogstaver.
Du kan da stadig give mig points, hvis du synes jeg har leveret en iddsats, der er points værd.
Jeg har bare på fornemmelsen, at du ikke har skrevet programmet selv, og derfor vil der (sikkert) være 1000 ting at spørge om. Derfor trækker jeg mig ud i tide :o)
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.