2012-05-19 2 views
2

У меня проблема с моим проектом winform C#.Заменить расположение кнопок

В моем проекте у меня есть функция, которая переключает расположение кнопок в их старое местоположение, если они находятся в одной и той же области.

частная пустота myText_MouseUp (объект отправителя, MouseEventArgs е) {

Point q = new Point(0, 0); 
     Point q2 = new Point(0, 0); 
     bool flag = false; 
     int r = 0; 
     foreach (Control p in this.Controls) 
     { 
      for (int i = 0; i < counter; i++) 
      { 
       if (flag) 
       { 
        if (p.Location.X == locationx[i] && p.Location.Y == locationy[i]) 
        { 
         oldx = e.X; 
         oldy = e.Y; 
         flag = true; 
         r = i; 
        } 
       } 
      } 
     } 
     foreach (Control p in this.Controls) 
     { 
      for (int j = 0; j < counter; j++) 
      { 
       if ((locationx[j] == p.Location.X) && (locationy[j] == p.Location.Y)) 
       { 
        Point arrr = new Point(oldx, oldy); 
        buttons[j].Location = arrr; 
        buttons[r].Location = new Point(locationx[j], locationy[j]); 
       } 
      } 
     } 
} 
    The problem with this code is that if they are in the same area, the buttons do not switch their locations. Instead they goes to the last button location. 

Если кто-то может помочь мне, что поможет мне много :)

ответ

2

if оператор всегда истинен. Это означает, что окончательное j цикл будет сделать это:

// last time round the i loop, i == counter-1 
// and q == new Point(locationx[counter-1], locationy[counter-1]) 
for (int j = 0; j < counter; j++) 
{ 
    Point q2 = new Point(locationx[j], locationy[j]); 
    buttons[i].Location = q2; 
    buttons[j].Location = q; 
} 

Конечным результатом этого является то, что каждая кнопка активна Location установлен в q, который

new Point(locationx[counter-1], locationy[counter-1]) 

Почему if заявление всегда оценивайте до true. Ну, во-первых, давайте посмотрим на пару из or положений в if заявлении:

|| ((q.Y >= q2.Y) && (q.X <= q2.X)) 
|| ((q.Y >= q2.Y) && (q.X == q2.X)) 

Это эквивалентно

|| ((q.Y >= q2.Y) && (q.X <= q2.X)) 

Линия, содержащая тест == не имеет абсолютно никакого влияния на конечный результат условия. Фактически все линии, содержащие ==, могут быть одинаково обработаны. Это оставляет:

|| ((q.Y >= q2.Y) && (q.X <= q2.X)) 
|| ((q.Y >= q2.Y) && (q.X >= q2.X)) 
|| ((q.Y <= q2.Y) && (q.X >= q2.X)) 
|| ((q.Y <= q2.Y) && (q.X <= q2.X)) 

Мы можем конденсируются

|| ((q.Y >= q2.Y) && (q.X <= q2.X)) 
|| ((q.Y >= q2.Y) && (q.X >= q2.X)) 

в

|| ((q.Y >= q2.Y) 

и аналогично

|| ((q.Y <= q2.Y) && (q.X >= q2.X)) 
|| ((q.Y <= q2.Y) && (q.X <= q2.X)) 

такая же, как

|| ((q.Y <= q2.Y) 

комбинат

|| ((q.Y >= q2.Y) 
|| ((q.Y <= q2.Y) 

, и вы можете видеть, что условие if всегда имеет значение true.

+0

когда я использую только эту часть || ((qY> = q2.Y) || ((qY <= q2.Y) его по-прежнему берут некоторые из кнопок последнее местоположение /: –

+0

, но я не понимал, почему его всегда верно, так что tnx :) –

+0

i didnt что я могу сделать, чтобы решить кнопку problam, как я могу надуть область кнопки с помощью тучных кнопок! –

Смежные вопросы