마우스가 놓여져있을 때 양식 이름을 얻으려면 트릭을 찾고있었습니다. 내가 하나의 MDI 양식을 가지고 있고 form1, form2, form3 및 모든 sdi 양식과 같은 많은 sdi 양식이 열려 있다고 가정하십시오. form1에서 하나의 타이머가 실행 중이며 주기적으로 실행됩니다. 마우스를 SDI 양식 창에 놓았을 때 timer tick 이벤트의 form1 레이블에 양식 이름을 표시하려고합니다.마우스가 SDI 양식의 위치에있을 때 양식 이름을 감지하는 방법
이렇게하면 되겠습니다. 코드는 여기
private void timer1_Tick(object sender, EventArgs e) {
var handle = WindowFromPoint(Cursor.Position);
if (handle != IntPtr.Zero) {
var ctl = Control.FromHandle(handle);
if (ctl != null) {
label1.Text = ctl.Name;
return;
}
}
label1.Text = "None";
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point pos);
완벽하게 실행되지만 약간의 결함이 있습니다. MDI 양식이나 Form1에 마우스를 올리면 form1에 양식 이름이 표시되지만 Form2 나 Form2에 마우스를 올려 놓으면 해당 이름이 표시되지 않습니다. 나는이 코드에서 무엇이 문제인지 이해할 수 없다. 그것을 고칠 수 있도록 안내해주십시오.
당신이 "마우스가에"무엇을 의미합니까? 반드시 양식을 활성화하지 않고도 마우스를 가져 가야한다는 것을 의미합니까, 아니면 양식이 어린이들, 즉 초점이 맞춰진 어린이들 사이에서 활발한 형태입니까? –
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –