2016-01-04 12 views
5

Używam WinForms. W moim formularzu mam panel z przyciskami, które przesuwają panel. Na przykład przycisk W górę i W dół powoduje przesunięcie panelu w górę lub w dół. Mam trudności z przesuwaniem panelu w lewo i w prawo za pomocą odpowiednich przycisków. Co robię źle?Przesuń panel w prawo i w lewo za pomocą przycisku Kliknij C#

private void Up_btn_Click(object sender, EventArgs e) 
    { 
     if (panel1.Location.Y > -2000) 
     { 
      panel1.Location = new Point(panel1.Location.X, panel1.Location.Y - 80);   
     } 
    } 

    private void Down_btn_Click(object sender, EventArgs e) 
    { 
     if (panel1.Location.Y < 720) 
     { 
      panel1.Location = new Point(panel1.Location.X, panel1.Location.Y + 80); 
     } 
    } 

    private void Left_btn_Click(object sender, EventArgs e) 
    { 
     if (panel1.Location.X < 720) 
     { 
      panel1.Location = new Point(panel1.Location.Y , panel1.Location.X + +55);    
     } 
    } 

    private void Right_btn_Click(object sender, EventArgs e) 
    { 
     if (panel1.Location.X < 720) 
     { 
      panel1.Location = new Point(panel1.Location.Y, panel1.Location.X -55); 
     } 
    } 

enter image description here

+2

A w czym problem? –

+1

W ostatnich 2 lokalizacjach kolejność xiy jest nieprawidłowa. –

+1

ten wiersz panel1.Location = new Point (panel1.Location.Y, panel1.Location.X + +55); tam jest podwójny znak "+". – Ian

Odpowiedz

5

(Tak, wiem, że nie zepsuć naszych testów matematycznych w jednym punkcie lub innego powodu problemu koordynować!)

Problem

Point() jest zawsze współrzędna (x, y). W twoim kodzie:

private void Left_btn_Click(object sender, EventArgs e) 
{ 
    if (panel1.Location.X < 720) 
    { 
     panel1.Location = new Point(panel1.Location.Y , panel1.Location.X + +55);    
    } 
} 

private void Right_btn_Click(object sender, EventArgs e) 
{ 
    if (panel1.Location.X < 720) 
    { 
     panel1.Location = new Point(panel1.Location.Y, panel1.Location.X -55); 
    } 
} 

Umieszczasz współrzędną X z wartością Y i na odwrót.

dygresja: jest podwójna + w lewym przycisku kliknij zdarzenie też ..

Krok 1

Po pierwsze, czy odwrotnie:

private void Left_btn_Click(object sender, EventArgs e) 
{ 
    if (panel1.Location.X < 720) 
    { 
     panel1.Location = new Point(panel1.Location.X + 55 , panel1.Location.Y);    
    } 
} 

private void Right_btn_Click(object sender, EventArgs e) 
{ 
    if (panel1.Location.X < 720) 
    { 
     panel1.Location = new Point(panel1.Location.X - 55, panel1.Location.Y); 
    } 
} 

Krok 2

Po drugie, sprawdź, czy lewy i prawy jest to, co ty ntended. Zwróć uwagę, że przejście w lewo oznacza zmniejszenie naszego X i przesunięcie w prawo powoduje zwiększenie X.

Czy nie należy tego robić w ten sposób?

private void Left_btn_Click(object sender, EventArgs e) //The name is Left 
{ 
    if (panel1.Location.X < 720) 
    { 
     panel1.Location = new Point(panel1.Location.X - 55 , panel1.Location.Y);    
    } 
} 

private void Right_btn_Click(object sender, EventArgs e) //The name is Right 
{ 
    if (panel1.Location.X < 720) 
    { 
     panel1.Location = new Point(panel1.Location.X + 55, panel1.Location.Y); 
    } 
} 
+0

Podwójne + nie stanowi problemu, ponieważ oznacza, że ​​liczba jest dodatnia. – Phiter

+0

@PhiterFernandes Tak, to tylko jedna strona. – Ian

+0

Używanie 'panel1.Location.X + 55' Twój lewy przycisk przesuwa panel w prawo! –

4

można mieszać współrzędne:

if (panel1.Location.X < 720) 
    { 
     panel1.Location = new Point(panel1.Location.Y , panel1.Location.X + 55);    
    } 

powinny być

if (panel1.Location.X < 720) 
    { 
     panel1.Location = new Point(panel1.Location.X + 55, panel.Location.Y);    
    } 

I to samo dla lewego przycisku.

6

W dwóch ostatnich metodach kolejność xi y jest niepoprawna.

aby przejść w lewo, należy zmniejszyć X:

panel1.Location = new Point(panel1.Location.X - 55, panel1.Location.Y); 

aby przesunąć w prawo, należy zwiększyć X:

panel1.Location = new Point(panel1.Location.X + 55, panel1.Location.Y ,); 

ja również, że jeśli używasz aż kryteria z >-y iw dół <y, prawdopodobnie potrzebujesz takiej logiki dla lewej i prawej strony >-x i <x.

Powiązane problemy