cercavo un trucco per ottenere il nome del modulo quando il mouse è posizionato su di esso. supponiamo di avere una forma mdi e molti moduli sdi come form1, form2, form3 e tutti i moduli sdi vengono aperti. supponiamo di avere un timer in esecuzione su form1 e che verrà eseguito periodicamente. Voglio mostrare il nome del modulo sull'etichetta di form1 dall'evento tick del timer quando il mouse è posizionato su qualsiasi finestra del modulo SDI.Come rilevare il nome del modulo quando il mouse è posizionato su qualsiasi modulo SDI
in questo modo provo a farlo. ecco il codice
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);
il codice sopra riportato funziona perfettamente ma c'è qualche problema tecnico. quando metto il mouse su un modulo MDI o su Form1, il nome del modulo viene visualizzato su form1 ma quando si posiziona il mouse su Form2 o Form2, il loro nome non viene visualizzato. non riesco a capire qual è il problema in questo codice. per favore guidami a ripararlo
Che cosa si intende per "mouse su di esso"? Vuoi dire sorvolare su di esso, senza necessariamente attivare la forma, o che la forma è la forma attiva tra i bambini, cioè quella che si concentra? –
Ho modificato il tuo titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –