01. oktober 2008 - 16:58Der er
6 kommentarer og 1 løsning
Hvordan opretter man globale variable i windowsformsapplication?
Jeg vil lave en variabel som kan bruges i hele formen, som kan virke hvis man taster shift og bevæger pile-tasterne så skal variablen være større og når man slipper shift så skal variablen være almindelig. Denne variabel skal kunne bruges i andre funktioner i formen.
Jeg har prøvet følgende, uden held: switch (e.KeyCode) { case Keys.Shift: value = 4; if (value != 4) { value = 2; } switch (e.KeyCode) { case Keys.Right: this.pictureBox2.Left += value; break; case Keys.Left: this.pictureBox2.Left -= value; break; case Keys.Up: this.pictureBox2.Top -= value; break; case Keys.Down: this.pictureBox2.Top += value; break; } break; }
Hvis du deklarer en variable inde i en funktion/procedure, da vil du kun kunne få adgang til den variable i samme function/procedure. Deklarer du derimod din variable inde i en klasse eller et modul kan variablen bruges at alle funktioner, procedurer og egenskaber i samme klasse/modul.
I dit tilfælde, skal du så deklare din variable inde i din form istedet for inde i en funktion eller procedure.
For at løse dit problem skal du håndtere både KeyDown og KeyUp event. Det skal foregå på følgende manér: Når din knap bliver trykket ned, skal du sætte værdien til den værdi du gerne vil have når knappen er trykke på - dette foregår altså i KeyDown. Når knappen så bliver slippet igen, skal du sætte værdien til det du gerne vil have den til når knappen ikke er trykke på ( eller når den bliver slippet), dette gør du i KeyUp.
Eksempel i VB.NET, skulle være let at konvertere til C#: Public Class Form1
Private _ShiftToggled As Boolean = False
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.ShiftKey Then _ShiftToggled = True Debug.Print("Shift is being hold") End If End Sub
Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp If e.KeyCode = Keys.ShiftKey Then _ShiftToggled = False Debug.Print("Shift is not longer being held") End If End Sub End Class
Du fik mig pejlet i den rigtige retning, jeg har brugt følgende: private void Keydemo() { this.KeyUp += new KeyEventHandler(OnKeyPress); } public void OnKeyPress(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.ShiftKey: value = 2; break; } } og kaldte Keydemo() fra Form1_Load.
Jeg ved ikke om det kan gøres bedre/pænere end ovenstående?
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.