2017-05-09 21 views
-2

Ich brauche 2 am nächsten Kante innerhalb eines picturebox.I'm bis zu einem Punkt zu finden, die folgenden Methode unter Verwendung vonFinding nächste Kante zu einem Punkt in einem 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"; 
      } 

     } 

Ist mein Ansatz richtig? Gibt es Vorbehalte für diesen Ansatz?

Bitte um Rat.

+0

Klingt, als ob Sie nach einem Code-Review suchen. Wenn ja, möchten Sie vielleicht stattdessen https://codereview.stackexchange.com fragen. –

+0

Nun, ich denke nicht, dass das Problem richtig eingerichtet wurde. Da ich das ursprüngliche Problem kenne, muss man eigentlich die Ausrichtung eines Rechtecks ​​in einem größeren Rechteck finden. Da das innere Rechteck Text unterschiedlicher Länge und Größe enthält, müssen Sie delta_x_left = innerRect.X und delta_x_right = outer.Right - inner.Right vergleichen. dann setze deltaDelta = delta_x_rechts - delta_x_left. wenn deltaDelta> 0 -> rightAligned sonst linksbündig. Sie können auch für math.abs (delatDelta) y someLimit testen, um eine zentrierte Position zu erkennen. – TaW

Antwort

1

Wie in den Kommentaren erwähnt, ist dies möglicherweise nicht der richtige Ort, da Ihr Code funktioniert, zumindest soweit ich weiß?

Aber ein paar Kommentare könnten sein, dass ich nicht sicher bin, warum Sie den Text auf einen Wert setzen und dann in der nächsten Zeile hinzufügen?

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

Warum nicht tun Sie es einfach direkt:

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

Oder natürlich der richtige Weg:

LaunchOrigin2.closestedge.Text = " left"; 

Ich würde auch den Code wie folgt verkürzen unten:

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

Aber das ist nur meine zwei Cent ...

+0

okay ... danke .. – techno

Verwandte Themen