Entwickler-Ecke

WinForms - Allgemeines "Selected"-Event?


Palladin007 - Mo 08.07.13 19:41
Titel: Allgemeines "Selected"-Event?
Moin,

ich weiß nicht, ob die Frage trivial ist, oder nicht, aber ich habe selber nichts über Google gefunden, oder bin zu doof dafür. Und ich bin auch langsam etwas unter Zeitdruck, daher frage ich einfach mal hier.

Und zwar suche ich Events, die abfangen, wann ein Control selektiert und deselektiert wird.
Der Sinn darin ist ganz einfach:
Ich habe eine TextBox für einen Dateipfad und wenn diese Box leer und nicht selektiert ist, soll ein kurzer Text in Grau da drin stehen. Wird die selektiert, verschwindet der Text, wird sie wieder deselektiert, wird der Text wieder angezeigt.

Weiß jemand, wie ich so ein Event finde, oder zuverlässig selber bauen kann, oder kennt jemand eine elegantere Lösung?


Gruß


Edit:

Ich brauch das immer, wenn das Control selektiert wird, also bei der Tab-Taste, der Maus, der Select-Methode und was es noch so gibt.


jaenicke - Mo 08.07.13 19:54

In Delphi heißt das OnEnter und OnExit, ich vermute das ist bei C# ähnlich...


Christian S. - Mo 08.07.13 20:13

In .NET heißt es Enter und Leave.


Ralf Jansen - Mo 08.07.13 20:14

Entweder das Enter/Leave oder GotFocus/LostFocus Event Paar.

Wenn du das nicht auch in XP brauchst ist das Feature übrigens schon in den Common Controls enthalten. Such mal nach CueBanner (genauer nach der EM_SETCUEBANNER Windows Message) da solltest du einige fertige Implementierungen für Winforms finden.


Palladin007 - Mo 08.07.13 20:32

Ich hab jetzt erst einmal Enter und Leave genommen, kam aber noch nicht dazu, das zu testen.


Sowas, wie Ralf Jansen es beschreibt, wäre natürlich klasse, zumindest, wenn ich es richtig verstanden habe, aber ich kann nicht einmal die fehlende Microsoft.SqlServer.Management.Controls.dll finden, die ist bei Verweisen weder unter .NET noch unter COM zu finden und daher kann ich auch die Klasse nicht nutzen.


Oder meinst du sowas:

http://eric.zarnosky.com/site/2012/02/25/converting-from-int64-date-active-directory/


Ralf Jansen - Mo 08.07.13 22:05

Zitat:
Sowas, wie Ralf Jansen es beschreibt, wäre natürlich klasse, zumindest, wenn ich es richtig verstanden habe, aber ich kann nicht einmal die fehlende Microsoft.SqlServer.Management.Controls.dll finden, die ist bei Verweisen weder unter .NET noch unter COM zu finden und daher kann ich auch die Klasse nicht nutzen.


Häh??


Siehe z.B. das hier [http://stackoverflow.com/questions/4902565/watermark-textbox-in-winforms/4902969#4902969]. Die erste Antwort.


Palladin007 - Di 09.07.13 00:53

Sorry, aber ich raffs nicht

Weder die Klasse, noch wie man das benutzt.

Wenn ich das einfach so in meine Form einbaue, der Eigenschaft Cue irgendwas übergebe und dann teste, passiert nichts, ist ne ganz normale Textbox.


jaenicke - Di 09.07.13 06:02

Ich habe die verbesserte Lösung darunter benutzt:
http://stackoverflow.com/questions/4902565/watermark-textbox-in-winforms/4902969#5450496
Das funktioniert problemlos, nur dass ich als Parameter 0 statt 1 übergebe, damit der Text nur angezeigt wird, wenn der User nicht den Fokus auf dem Control hat. Ein kleines Video liegt im Anhang, am Ende siehst du auch den Effekt kurz.


Palladin007 - Di 09.07.13 10:54

Funktioniert nicht :(

Ich bekomme den Text zwar im Designer angezeigt (war vorher nicht so), allerdings passiert rein gar nichts, wenn ich dann Teste. Ich hatte das auch vorher wie im Video gemacht und jetzt wieder, aber wenn die CueTextBox den Fokus verliert, bleibt sie so, wie sie war.


Ralf Jansen - Di 09.07.13 19:09

Hast du eventuell Application.EnableVisualStyles auskommentiert?


jaenicke - Di 09.07.13 19:25

Hast du vielleicht bei dir im System an den visuellen Einstellungen herumgespielt? Mit Standardeinstellungen funktioniert das von XP bis Windows 8 ohne Probleme. :nixweiss:

Zeig doch mal einen Screenshot...


Palladin007 - Mi 10.07.13 01:18

Ach da haben wir ja das Problem, dank Ralf :D


Ein "Application.EnableVisualStyles" gab es nie, weil ich in einer Konsolen-Anwendung begonnen habe, da ich so leichter testen kann und noch keine Form hatte.
Habe mal die typischen Zeilen, die sonst in einer WinForms-Anwendung automatisch generiert werden, in die Main-Methode kopiert und jetzt funktioniert alles wunderbar, vielen Dank ^^


PS:
Natürlich auch großes Dankeschön an jaenicke für das Video ^^
Die kleine CueTextBox nehme ich in eine kleine Sammlung von Klassen auf, die ich immer wieder verwende, ich mag nämlich diese kleine Funktion, die sie erfüllt ^^