szukałem podstępu, aby uzyskać nazwę postaci, gdy mysz jest na niej umieszczona. załóżmy, że mam jedną formę mdi i wiele formularzy sdi takich jak form1, form2, form3 i wszystkie formularze sdi są otwarte. przypuśćmy, że mam jeden timer uruchomiony na formularzu 1, który będzie działał okresowo. Chcę wyświetlić nazwę formularza na etykiecie form1 z zdarzenia znacznika czasu, gdy mysz znajduje się w dowolnym oknie formularza SDI.Jak wykryć nazwę formularza, gdy mysz znajduje się na dowolnym formularzu SDI
w ten sposób próbuję to zrobić. tutaj jest kod
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);
powyższy kod działa idealnie, ale jest jakaś usterka. kiedy umieszczam mysz na formularzu MDI lub na formularzu Form1, wtedy nazwa formularza jest wyświetlana na formularzu1, ale kiedy umieszczę mysz na formularzu 2 lub formularzu 2, ich nazwa nie jest wyświetlana. nie jestem w stanie zrozumieć, jaki jest problem w tym kodzie. poprowadź mnie, aby to naprawić.
Co masz na myśli przez „Mysz jest na nim?” Czy chodzi ci o zawisanie nad nim, niekoniecznie aktywowanie formy, czy też forma jest aktywną formą wśród dzieci, tj. Tą, która się skupia? –
Zmieniłem twój tytuł. Zobacz, "[Czy w tytułach pytania powinny znaleźć się" znaczniki "?] (Http://meta.stackexchange.com/questions/19190/)", gdzie konsensus brzmi "nie, nie powinien". –