2017-05-09 31 views
-2

我需要使用下面的方法查找最接近邊緣的點在PictureBox

void findclosestedges(Point p) 
     { 


      //Xedge=1 -- Left Edge is closer to Point 2--Right Edge 
      int Xedge,Yedge; 
      //Finding closest Left/Right Edge 
      if (p.X < (Width - p.X)) 
      { 
       Xedge = 1; 
       LaunchOrigin2.closestedge.Text = " "; 
       LaunchOrigin2.closestedge.Text = LaunchOrigin2.closestedge.Text + " left"; 
      } 
      else 
      { 
       Xedge = 2; 
       LaunchOrigin2.closestedge.Text = " "; 
       LaunchOrigin2.closestedge.Text = LaunchOrigin2.closestedge.Text + " right"; 
      } 

      //Finding closest Top/Bottom Edge 

      if (p.Y < (Height - p.Y)) 
      { 
       Yedge = 1; 

       LaunchOrigin2.closestedge.Text = LaunchOrigin2.closestedge.Text + " top"; 
      } 
      else 
      { 
       Yedge = 2; 

       LaunchOrigin2.closestedge.Text = LaunchOrigin2.closestedge.Text + " bottom"; 
      } 

     } 

是我的方法正確找到picturebox.I'm內2個最接近邊緣的一個點?這種方法是否有任何警告?

請指教。

+0

聽起來像你正在尋找代碼審查。如果是這樣,您可能需要在https://codereview.stackexchange.com上提問。 –

+0

嗯,我不認爲它設置正確的問題。因爲我知道原來的問題,你實際上需要做的是在一個更大的矩形中找到一個矩形的對齊方式。由於內部矩形將包含不同長度和大小的文本,因此您需要比較delta_x_left = innerRect.X和delta_x_right = outer.Right - inner.Right。然後設置deltaDelta = delta_x_right - delta_x_left。如果deltaDelta> 0 - > rightAligned,則左對齊。你也可以測試math.abs(delatDelta)y someLimit來檢測一個居中的位置.. – TaW

回答

1

正如在評論中提到的,這可能不是自你的代碼工作以來的正確位置,至少據我所知?

但有一些意見可能是我不確定爲什麼你將文本設置爲一個值,然後在下一行添加到它?

LaunchOrigin2.closestedge.Text = " "; 
LaunchOrigin2.closestedge.Text = LaunchOrigin2.closestedge.Text + " left"; 

爲什麼不只是做它直接:

LaunchOrigin2.closestedge.Text = " " + " left"; 

或課程的正確方法:

LaunchOrigin2.closestedge.Text = " left"; 

我也會縮短下來像下面的代碼:

void findclosestedges(Point p) { 
     int Xedge = p.X < (Width - p.X) ? 1 : 2; 
     int Yedge = p.Y < (Height - p.Y) ? 1 : 2; 

     LaunchOrigin2.closestedge.Text = (Xedge == 1 ? " left" : " right") + (Yedge == 1 ? " top" : " bottom"); 
    } 

但那只是我的兩分...

+0

好吧......謝謝.. – techno