Form의 ClientRectangle's
"0,0"이 아니라 Control의 위치를 폼의 위치와 관련하여 제공하는 속성을 찾고 있습니다.컨트롤의 위치를 폼의 위치를 기준으로 가져 오는 방법은 무엇입니까?
물론 모든 것을 화면 좌표로 변환 할 수 있지만 더 직접적인 방법이 있는지 궁금합니다.
Form의 ClientRectangle's
"0,0"이 아니라 Control의 위치를 폼의 위치와 관련하여 제공하는 속성을 찾고 있습니다.컨트롤의 위치를 폼의 위치를 기준으로 가져 오는 방법은 무엇입니까?
물론 모든 것을 화면 좌표로 변환 할 수 있지만 더 직접적인 방법이 있는지 궁금합니다.
대답은 직접적인 방법이 없다는 것입니다. 기술적으로는 질문의 세부 사항을 주어 올바른 (내가 화면 좌표를 사용하는 것보다 방법 다른 찾고 있어요 질문에 명시된 바와 같이.)
화면 좌표로 변환 한 다음 수학을 수행해야합니다.
Point controlLoc = form.PointToScreen(myControl.Location);
폼의 위치를 화면 좌표 이미. 이제
: 당신 폼의 클라이언트 영역에 위치 폼의 왼쪽 위 모서리를 기준으로하기보다는 상대를 줄 것이다
Point relativeLoc = new Point(controlLoc.X - form.Location.X, controlLoc.Y - form.Location.Y);
.
답장을 보내 주셔서 감사합니다. 그러나 질문에 썼 듯이 화면 좌표를 확인하는 것보다 직접적인 방법을 찾고 있습니다. – ispiro
@ispiro : 직접적인 방법은 내장되어 있지 않습니다. 당신은 쉽게 그 논리를 당신이 부를 수있는 작은 기능으로 포장 할 수 있습니다. 또는 폼이 처음 표시 될 때'form.PointToScreen (new Point (0, 0))'을 호출하고 결과를 저장 한 다음 원하는 경우 X 및 Y 값을 컨트롤의 Location에 추가하면됩니다. 창 상대 좌표를 얻으십시오. –
마지막 코멘트에 관해서. 나는 폼의 클라이언트 영역 위치를 얻기 위해'PointToScreen'을 호출하고, 위치의 X와 Y 값을 빼서 오프셋을 얻는다는 의미였습니다. 미안합니다. 입력의 경우 –
선택한 답변입니다 : 같은 속성이하는 .NET 프레임 워크에 존재하지 않습니다.
그런 속성을 원한다면 트릭을 수행 할 컨트롤 확장이 있습니다. 예, 화면 좌표를 사용하지만 게시물 제목의 일반 특성을 고려할 때이 페이지에있는 일부 사용자는 유용 할 것입니다.
덧붙여서, 모든 제어 부모를 반복하여 화면 좌표없이이 작업을 수행하는 데 몇 시간을 보냈습니다. 나는 화해시킬 두 가지 방법을 절대로 가질 수 없었다. 이것은 Aero가 창 크기에 대해 어떻게 놓여 있는지에 대한 OP에 대한 Hans Passant의 의견 때문일 수 있습니다.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Cambia
{
public static class ControlExtensions
{
public static Point FormRelativeLocation(this Control control, Form form = null)
{
if (form == null)
{
form = control.FindForm();
if (form == null)
{
throw new Exception("Form not found.");
}
}
Point cScreen = control.PointToScreen(control.Location);
Point fScreen = form.Location;
Point cFormRel = new Point(cScreen.X - fScreen.X, cScreen.Y - fScreen.Y);
return cFormRel;
}
}
}
이것은 훌륭한 해결책입니다. 하지만, 당신이'cFormRel'을 돌려 주려한다고 생각합니다. – dshrout
_control 's location_이 (가) 원하는 커서의 위치는 무엇입니까? – uday
@uDaY 의미 : 화면 좌표입니다. 폼이 100,100이고 컨트롤이 150,350 인 경우 50,250을 얻고 싶습니다. – ispiro
조심해 : http://stackoverflow.com/questions/8838621/how-to-determine-actual-windows-form-size-with-all-nonclient-elements-when-run –