Ich brauche ein modales Formular, um den Benutzer zu benachrichtigen (zB durch Schütteln), wenn der Benutzer versucht, auf eine andere Form der Anwendung zuzugreifen (per Mausklick oder sonstwie)). Das Problem ist, dass ich diesen Versuch nicht erkennen kann. Events/Deactivate, LostFocus, Leave/funktioniert einfach nicht. HINZUFÜGEN: das modale Formular ist randlos, wenn also ein Benutzer auf das übergeordnete Formular klickt (das deaktiviert ist, wenn das modale Formular geöffnet ist) - NOTHING passiert. Die Form hat keinen Rand, also blinkt sie nicht. Deshalb brauche ich eine Möglichkeit, um den Benutzer zu benachrichtigen, dass er das modale Formular schließen muss, um auf das übergeordnete Formular zuzugreifen. Ich beschloss, das modale Formular zu schütteln, um den Benutzer darauf aufmerksam zu machen. Aber dafür muss ich das Ereignis abfangen, wenn der Benutzer versucht, auf das übergeordnete Formular zuzugreifen. Ich weiß nicht, wie ich das machen soll.C# - So erkennen Sie den Versuch des Benutzers, den Fokus von einem modalen Formular zu entfernen
Antwort
Verwenden Form.ShowDialog()
statt Form.Show()
ShowDialog
zeigt das Fenster als modal, was bedeutet, dass Sie nicht mit dem übergeordneten Formular interagieren kann, bis es geschlossen wird.
Und Sie können übergeordnete Formular
this.Enabled = false;
MyChildForm childForm = new MyChildForm();
childForm.ShowDialog(this);
Ich weiß, wie man es modal macht. Aber das ist nicht mein Problem. Bitte lesen Sie das Thema. –
@AlexD. Lesen Sie Ihre Frage: _ "Ich brauche ein modales Formular, um den Benutzer zu benachrichtigen (z. B. durch Schütteln), wenn der Benutzer versucht, auf eine andere Form der Anwendung zuzugreifen (per Mausklick oder auf irgendeine andere Weise)" _. Also ist dieser Teil eigentlich völlig irrelevant? Ihre Frage lautet: "Wie kann ich erkennen, wenn auf ein modales Formular nicht geklickt wurde?" – TEK
Ich habe die Frage bearbeitet. Englisch ist nicht meine Muttersprache, tut mir leid, wenn Sie es nicht verstehen konnten ( –
Sie könnten Hacky etwas einiges deaktivieren:
Zum einen eine boolean-Eigenschaft auf Ihre Hauptformular hinzufügen (die eine, die Sie blinken wollen, nicht die modale Form), so dass Sie können, ob die modal verfolgen Form dargestellt:
bool inModalForm;
void button1_Click(object sender, EventArgs e)
{
using (var form = new Form2())
{
this.BeginInvoke(new Action(() => inModalForm = true));
form.ShowDialog();
inModalForm = false;
}
}
den booleschen Set mit BeginInvoke()
, weil Sie eine Fensternachricht über das Hauptfenster des po bekommen Nach inModalForm
wird die Einstellung geändert, die Sie nicht möchten.
außer Kraft setzen Dann WndProc()
in der Hauptform wie folgt:
protected override void WndProc(ref Message m)
{
const int WM_WINDOWPOSCHANGING = 0x46;
if (inModalForm && (m.Msg == WM_WINDOWPOSCHANGING))
{
Debug.WriteLine("Someone's trying to activate the window.");
}
base.WndProc(ref m);
}
Machen Sie Ihre Fenster Blitz, wo ich die Debug.WriteLine setzen(). Ich denke, Sie müssen this.BeginInvoke()
verwenden, um Ihre Flash-Methode aufzurufen; du willst es nicht von innen machen WndProc()
!
Dies ist nicht perfekt, weil ich denke, dass Sie gelegentlich eine falsche Nachricht erhalten können (wenn zum Beispiel keine Form den Fokus hat und Sie dann auf die modale Form klicken), aber vielleicht wird es tun.
- 1. C#: Erkennen, welche Anwendung den Fokus hat
- 2. So entfernen Sie den Fokus von der Senden-Schaltfläche
- 3. Javascript - Entfernen Sie den Fokus von Eingabe
- 4. So entfernen Sie den Standardwert für die Eingabe im Fokus
- 5. So speichern Sie Daten in den Anwendungssupport des Benutzers?
- 6. Benachrichtigen Sie den Administrator des neuen Benutzers
- 7. So geben Sie den Fokus des Tkinter-Dateidialogs
- 8. Entfernen Sie den Fokus von der Taste einmal geklickt
- 9. Erkennen von Unschärfe aka verlieren den Fokus eines Draft.js Editors
- 10. Den Fokus auf eine benutzerdefinierte Direktive erkennen
- 11. So finden Sie den modalen Dialogöffner von Javascript?
- 12. So erkennen Sie den Web-Server-Typ
- 13. So stellen Sie den Fokus auf die Rasteransicht ein C#
- 14. So erkennen Sie den Status eines ProgressDialogs
- 15. Facebook Messenger Bot: Erkennen Sie den Fokus auf Konversation?
- 16. So erkennen Sie den Kompasskalibrierungsschalterstatus unter iOS
- 17. So ermitteln Sie, ob ein Textfeld in einem Windows-Formular den Fokus hat
- 18. Wie speichern Sie den Namen des angemeldeten Benutzers?
- 19. So entfernen Sie den Hintergrund des Layouts vollständig
- 20. WPF: Erkennen, wenn Fenster den Fokus verliert
- 21. Python: So erkennen Sie den Debug-Interpreter
- 22. So legen Sie den Fokus auf ein SWT-Tabellenelement fest
- 23. Twitter Bootstrap modal: So entfernen Sie den Slide-down-Effekt
- 24. So entfernen Sie den Schatten des Spinner DropDownView
- 25. So erkennen Sie den Formularnamen, wenn die Maus auf einem beliebigen SDI-Formular steht
- 26. So entfernen Sie den Abschnitt in R
- 27. So entfernen Sie den Alarmdialog Titelleiste
- 28. Entfernen Sie den Fokus von einem Eingabefeld in einem Jquery-Dialog
- 29. Sie müssen den Benutzernamen des aktuell angemeldeten Benutzers an die Eingabe in einem Feld senden
- 30. So legen Sie den anfänglichen Fokus für ein Formular in Silverlight bei Verwendung von Caliburn.Micro
Und mit ['.ShowDialog()'] (https://msdn.microsoft.com/en-us/library/c7ykbedk (v = vs.110) .aspx), die diese Funktionalität hat, ist kein Möglichkeit? – TEK
Ich weiß, wie man eine Form modal macht (ich benutze ShowDialog). Das Problem besteht darin, programmgesteuert herauszufinden, dass der Benutzer versucht, auf das übergeordnete Formular zuzugreifen, wenn das modale Formular geöffnet ist. –
Dann müssen Sie dies explizit in der Frage machen, da es im Moment mehrdeutig ist. – TEK