Avatar billede webhjaelp Nybegynder
01. oktober 2008 - 16:58 Der 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;
            }
Avatar billede qua Nybegynder
01. oktober 2008 - 19:23 #1
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.
Avatar billede webhjaelp Nybegynder
02. oktober 2008 - 09:23 #2
Ja, men problemet er at når jeg slipper shift tasten så skal værdien ændres til 2 igen.
Avatar billede qua Nybegynder
02. oktober 2008 - 11:21 #3
Ahh, så problemet er ikke variablen.

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
Avatar billede webhjaelp Nybegynder
02. oktober 2008 - 18:25 #4
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?
Avatar billede qua Nybegynder
02. oktober 2008 - 20:20 #5
Strukturen i koden ser ikke speciel god ud, men så længe det endnu engang virker.
Avatar billede webhjaelp Nybegynder
03. oktober 2008 - 08:29 #6
Hvordan kan strukturen se bedre ud?
Avatar billede webhjaelp Nybegynder
05. oktober 2011 - 08:51 #7
Jeg lukker....
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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