Form immer im Vordergrund
-
nene. ist für ne serverapp von mir.
damit will ich so einige administrative dinge erledigen.
-
BlahMan schrieb:
Hallo!
d.h. ich darf nicht rausklicken dürfen ohne dass sich das fenster wieder aktiviert und man wieder im editfeld ist (es soll so ne art command line sein und es stört wenn sich andere fenster öffenen und dadurch der focus verloren geht).
hier einige Versuche:Form3->BringToFront();
Form3->SetFocus();
Edit1->SetFocus();
Gruß
Ich verstehe dein Problem nicht ganz. Ich versuch es mal so zu schildern wie ich das verstehe:
Ein Fenster mit Edit. Wenn das Fenster dargestellt wird, soll das Edit-Feld den Fokus erhalten. Eigentlich, wenn nur ein Edit-Feld im Formular ist, wird das automatisch das aktive Element. Oder hast du mehrere Elemente in dem Formular?Edit1->SetFocus();
ist schon das richtige.
-
Form3->ShowModal();
oder
SetWindowPos(Form3->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
-
hallo!
Es geht bei mir gar nicht um die Komponenten in der Form. Ich will Anwendungsübergreifend mein Fenster im Focus haben.
D.h. wenn ich z.B. mit der Maus in Firefox klicke dann soll sich das Fenster automatisch in den Focus setzten so dass ich trotz dessen, dass ich das Firefox-Fenster angeklickt habe, in mein Edit-Feld auf meiner Form weiterschreibe.
Ich hoffe das war etwas verständlicher ausgedrückt
-
Ja, dazu musst du, nach dem Klick auf Firefox, einfach wieder dein Fenster anwählen.
Ansonsten siehe in den FAQ: Tasten systemweit abfangen
KK
-
BlahMan schrieb:
D.h. wenn ich z.B. mit der Maus in Firefox klicke dann soll sich das Fenster automatisch in den Focus setzten so dass ich trotz dessen, dass ich das Firefox-Fenster angeklickt habe, in mein Edit-Feld auf meiner Form weiterschreibe.
OK, nehmen wir mal an, du bekommst das hin, und dann? Dann kannst du doch nichts mehr machen, deine anwendung wird für immer aktiv bleiben.
-
neoexpert schrieb:
OK, nehmen wir mal an, du bekommst das hin, und dann? Dann kannst du doch nichts mehr machen, deine anwendung wird für immer aktiv bleiben.
Och man, ich hab darauf gewartet, dass er das selbst herausfindet - auf die harte Tour...
Ist aber doch auch gar nicht so schlimm, sobald er seine Anwendung beendet, geht doch alles wieder.
-
Huhu,
es ist ja auch genau der Sinn & Zweck, dass die Form immer aufbleibt, bis sie geschlossen wird. Es ist ja so, dass wenn man etwas in diese Command Line eingeben will, dann stören halt andere Programme die sich (aus welchen Gründen auch immer) in den Vordergrund drängen.
Das ganze läuft halt so ab: Man drückt ne Tastenkombination, die Form wird geöffnet, man schreibt ein Kommando rein und dann schließt sich die Form wieder.
Killer-Kobold schrieb:
Ja, dazu musst du, nach dem Klick auf Firefox, einfach wieder dein Fenster anwählen.
KKGenau das ist mein Plan. Die Frage ist nur: wie mache ich das?^^
Für nen kleinen Tipp wär ich sehr dankbarGruß
-
Achso, bei .NET gibt es einen OnDeactivate Ereignis:
http://msdn.microsoft.com/de-de/library/system.windows.forms.form.ondeactivate.aspx
und hier habe ich noch etwas gefunden, vielleicht hilft es dir:
http://books.google.de/books?id=maxGeDshjQMC&pg=PA97&lpg=PA97&dq=ondeactivate+ereignis&source=bl&ots=Tw-fTxnv6y&sig=DeN_5nEFD5GAoWwhkukh31tcLq4&hl=de&ei=5be7SuDHC4mqmAPlwrm1DQ&sa=X&oi=book_result&ct=result&resnum=2#v=onepage&q=ondeactivate%20ereignis&f=false
-
So in .NET habe ich das so "gelöst":
using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { TextBox TB; Timer T; public Form1() { Deactivate += new EventHandler(Form1_Deactivate); Activated+= new EventHandler(Form1_Activated); TB = new TextBox(); Controls.Add(TB); T = new Timer(); T.Tick += new EventHandler(timer_Tick); T.Interval = 1; T.Enabled = false; } private void Form1_Deactivate(object sender, EventArgs e) { T.Enabled = true; } private void timer_Tick(object sender, EventArgs e) { Activate(); TB.Focus(); } private void Form1_Activated(object sender, EventArgs e) { T.Enabled = false; } } static class Program { [STAThread] static void Main() { Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }