2014-11-30 5 views
0

ToolStripMenuItem의 위치가 화면에 렌더링 될 때 부모의 좌표를 기준으로 왼쪽 위 좌표를 추출하려고합니다. Location 멤버가있는 Bounds 속성이 있지만 실제 위치와 관련하여 무의미한 (적어도 내 관점에서는) 정보를 반환합니다. (하여 skillz 페인트) 이미지에 부모가 양식되고 (내가 사용하고자하는 정확한 위치를 보여줍니다ToolStripMenuItem 부모를 기준으로 한 위치

private void newShapeOption_Click(object sender, EventArgs e) 
{ 
    ToolStripMenuItem item = sender as ToolStripMenuItem; 
    Point point = item.Bounds.Location; // returns {X = 0, Y = 2} every time for some reason 
    // the rest is unimportant 
} 

빨간 점 :

은 "클릭"이벤트 핸들러는 다음과 같이 보입니다 제어라는 이름의 "창 0"- 그것의 및 MDI 응용 프로그램) :

Example

+0

가 정말 ToolStrip에인가 나는 메뉴 항목 후 LABEL1 넣고 싶어? 툴 스트립을 Winform으로 드래그하면 자동으로 X = 0, Y = 2에 해당하는 폼 상단에 자동으로 고정됩니다. –

+0

@RobertHarvey 상단에 도킹되어 있지만 ToolStripMenuItem (내가 생각하는 자식 컨트롤)입니다. Bound.Location은 분명히 부모와 같은 위치를 반환합니다. 이것은 유일한 자식이므로 결과적으로 첫 번째이기도합니다. 실제로 렌더링 된 그래픽 객체의 위치를 ​​얻는 방법이 없다는 사실에 수치스러워한다. – Venom

+0

실제 렌더링되는 그래픽 객체의 위치는 무엇입니까? 논리적으로 도킹 된 도구 상자 객체의 첫 번째 메뉴 항목은 도구 막대의 왼쪽 상단 구석에 있거나 몇 픽셀을 주거나 가져 가야합니다. –

답변

1

컨텍스트 메뉴는 클릭 한 객체의 물리적 위치의 더 의식이 없습니다. 그것은 객체 자체의 OnClick 이벤트의 주입니다. 따라서 컨텍스트 메뉴에 클릭 좌표에 대한 액세스 권한을 부여하려면 클릭하는 객체의 OnClick 이벤트를 연결하고 일부 형식의 전역 변수에서 클릭 좌표를 캡처 한 다음 해당 값을 ContextMenu_Click에 사용해야합니다 행사.

0

당신은이 예로서 항목의 폭을 사용할 수 있습니다

int w = 0; 
for (int i = 0; i < menuStrip1.Items.Count; i++) 
{ 
    w += menuStrip1.Items[i].Width; 
} 
label1.Width = (int)(this.Width - w); 
label1.Location = new Point(w, label1.Location.Y); 
관련 문제