Announcement

Collapse
No announcement yet.

Verhindern, das eine Form einen Focus erhält

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verhindern, das eine Form einen Focus erhält

    Hi,
    ich würde gern eine Form einblenden, die allerdings keinen Focus erhalten soll. D.h. wenn die Form eingeblendet wird, soll das aktuelle Programm weiterhin den Focus behaltet, als wäre nichts gewesen.
    Ganz so, wie Outlook 2003 das macht, wenn eine Mail empfangen wurde.
    Weiß jemand, wie das gehen könnte?

    Danke

    Benjamin Heil

  • #2
    Hi.

    Ich hab nun rausbekommen, das ich mit ShowWindow(this.Handle, 4); eine Form anzeigen kann, ohne das diese den Fokus erhält. Wenn ich diese Form über einen Button erzeuge, funktioniert es wunderbar.
    Allerdings: Ich muß dies innerhalb eines Events machen, d.h. per Delegate vermittelt eine Klasse, das nun dieses Form erzeugt werden soll. In diesem Event aber wird zwar das Fenster erzeugt, aber nicht angezeigt.

    Die einzige Möglichkeit, das Form dennoch im Event zur Anzeige zu bewegen, ist durch Aufruf von ShowDialog(). Hierbei wird das Programm auch weiter ausgeführt (!), es findest also keine Unterbrechung statt. Leider bekommt natürlich so das neue Fenster den Fokus, was nicht Sinn der Sache ist.

    Langsam weiß ich nicht mehr weiter. Wer kann helfen?

    Vielen Dank!

    Benjamin Hei

    Comment


    • #3
      hast du schonmal versucht mit Server.Transfer zu arbeiten

      Comment


      • #4
        Hallo,

        normalerweise sollte sich das aufrufende Formular wieder in den Vordergrund dängeln können:
        <code>
        [DllImport(<font color="#9933CC">&quot;User32&quot;</font>)]
        <b>private</b> <b>static</b> <b>extern</b> <b>int</b> SetForegroundWindow(<b>int</b> hwnd);
        <br>
        <b>private</b> <b>void</b> button1_Click(<b>object</b> sender, System.EventArgs e)
        {
        Form2 aFrm = <b>new</b> Form2();
        aFrm.Show();
        SetForegroundWindow(<b>this</b>.Handle.ToInt32());
        }
        </code>
        &gt;Hierbei wird das Programm auch weiter ausgeführt (!), es findest also keine Unterbrechung statt.
        <br>
        Der Grund dafür liegt darin, dass der Aufruf anscheinend in einem separaten Thread erfolgt und somit den primären Thread des ersten Formulars nicht beeinträchtigt. An dieser Stelle gelten die alten Win32-Regeln: Es darf nur der Thread direkt mit dem Fenster hantieren, der es auch erzeug that. Über <b>ISynchronizeInvoke.InvokeRequired</b> lässt sich nachprüfen, ob der Show-Aufruf im "falschen" Thread erfolgt. Erst das .NET Framework 2.0 löst beim "falschen" Thread automatisch eine Exception aus

        Comment

        Working...
        X