2016-01-04 2 views
5

Я использую WinForms. В моей форме у меня есть панель с кнопками, которые перемещают панель. Например, кнопка «Вверх» и «Вниз» перемещает панель вверх или вниз. У меня возникают трудности с перемещением панели влево и вправо с помощью соответствующих кнопок. Что я делаю неправильно?Перемещение панели справа и слева с помощью кнопки. 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

И в чем проблема? –

+1

В ваших последних 2 положениях порядок x и y неверен. –

+1

этот линия panel1.Location = новый Point (panel1.Location.Y, panel1.Location.X + +55); там есть двойной знак '+'. – Ian

ответ

5

(Да, я знаю, что мы же испортить наши математические тесты в одной точке или другой в зависимости от координат вопроса!)

Проблема

Point() является всегда (х, у). В вашем коде:

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); 
    } 
} 

Вы поместили координату X с значением Y и наоборот.

Боковая примечание: есть в левой события нажатия кнопки тоже двойной + ..

Шаг 1

Во-первых, сделайте наоборот:

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); 
    } 
} 

Шаг 2

Во-вторых, убедитесь, что слева и справа вы, ntended. Обратите внимание, что перемещение влево означает, что мы уменьшаем наш X и двигаемся вправо, мы увеличиваем наш X.

Не должно ли это быть сделано так?

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

Двойной + не проблема, так как это означает, что число положительное. – Phiter

+0

@PhiterFernandes Да, это просто примечание. – Ian

+0

Использование 'panel1.Location.X + 55' Ваша левая кнопка перемещает панель вправо! –

4

Вы смешали координаты:

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

должен быть

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

И то же самое для левой кнопки.

6

В последних двух методах порядок x и y неверен.

Для перемещения влево, вы должны уменьшить X:

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

для перемещения вправо, вы должны увеличить X:

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

Я также думаю, если вы израсходовали критерии с >-y и вниз <y, возможно, вам нужна такая логика для левого и правого >-x и <x.