2017-11-15 3 views
-1

그래서 사각형을 그리거나 영역을 선언해야하는 그림 상자가있어서 그림 영역을 클릭 할 수 있습니다. 나는 이것에 대해 수색하고 검색했으며, 대상 또는 지역에 직사각형이 필요하다는 결론에 도달했습니다. 지도를 표시하는 항목이 단순화되면 사용자가 클릭 할 수있는 위치에 표시되는 항목이 필요 없으며 작업을 수행합니다.picturebox 안에 클릭 가능한 상자 추가하기 C#

지도 위에는지도가 바뀌며 표시가 변경되면 상자를 다른 위치로 변경해야합니다. 아래는 내가 생각 해낸 것이고 작동하지 않는 것입니다. 나는 다른 방식으로도 열려 있습니다.

public Rectangle Location1; 
    public Rectangle Location2; 

    public String CharacterLocation == "WorldMap"; 

private void GenerateRegions() 
    { 
     Pen blankPen = new Pen(Color.Transparent, 3); 

     if (CharacterLocation == "WorldMap") 
     { 
      Rectangle[] rects = 
     { 
      Location1 = new Rectangle(100, 200, 250, 50), 
      Location2 = new Rectangle(50, 100, 250, 50) 

     }; 

      MapBox.CreateGraphics().DrawRectangles(blankPen, rects); 
     } 
    } 
    private void MapBox_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (Location1.Contains(e.Location)) 
     { 

     } 
    } 
+0

[그것은 작동하지 않습니다?] (http://idownvotedbecau.se/itsnotworking/) 당신이 디버깅 할 때 어떻게됩니까? :) – john

+0

음, 필자는 펜을 검정색으로 바꿔서 볼 수 있었지만, 직사각형이 보이지 않았습니다. – Morrg

+0

PictureBox의 Paint 이벤트를 살펴볼 수 있습니다. 부수적으로, 나는 그것이 당신의 문제라고 짐작하지 못했을 것입니다. – john

답변

0

OK 여기가 어떻게 되었습니까? 직사각형을 잘못된 위치에 그리지 만 이미지가 확대 된 원인을 가정합니다.

 private void GenerateRegions() 
    { 

     MapBox.Invalidate(); 
     Pen blankPen = new Pen(Color.Transparent, 3); 
     Console.WriteLine(CharacterLocation); 

     if (CharacterLocation == "WorldMap") 
     { 
      Console.WriteLine(CharacterLocation); 

      Rectangle[] rects = 
     { 
      Location1 = new Rectangle(64, 25, 20, 20), 
      Location2 = new Rectangle(68, 70, 20, 20) 

     }; 

      using (var g = Graphics.FromImage(MapBox.Image)) 
      { 
       g.DrawRectangles(blankPen, rects); 
       MapBox.Refresh(); 
      } 
     } 
    private void MapBox_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (Location1.Contains(e.Location)) 
     { 
      arealbl.Text = "You clicked it 1"; 
     } 
     if (Location2.Contains(e.Location)) 
     { 
      arealbl.Text = "You clicked it 2"; 
     } 

}