Entwickler-Ecke
WinForms - Cursorpositon herausfinden...
tomycat - Mo 05.06.17 10:19
Titel: Cursorpositon herausfinden...
hallo,
ich habe eine Textbox A eine Textbox B und einen Button xy.
Ist der Cursor in der Textbox A und ich klicke auf den Button xy soll die Messages kommt "A". Bei Textbox B soll "B" kommen.
Wie sieht der Inhalt von dem Button xy aus?
Moderiert von
Christian S.: Topic aus Basistechnologien verschoben am Mo 05.06.2017 um 10:23
Ralf Jansen - Mo 05.06.17 11:27
Zitat: |
dafür gibt es die Eigenschaft ActiveControl... |
Wenn man nichts besonderes anstellt wird im Click Handler eines Buttons der Button das ActiveControl sein.
Zitat: |
Ist der Cursor in der Textbox A und ich klicke auf den Button xy soll die Messages kommt "A". |
Im Standardfall beschreibst du einen ungültigen Zustand. Sobald du den Button klickst hat der den Focus womit niemand anderes den Focus hat und damit auch niemand der einen Cursor haben könnte noch einen hat. Was du machen kannst ist dir zu merken welches Control(oder nur TextBox) zuletzt den Focus hatte. Dazu kannst du z.B. den Leave Event eines Control verwenden und dir in diesem das Control merken das da gerade verlassen wurde. Das gemerkte Control kannst du dir dann im Button Klick Event ansehen und das passende damit anstellen.
Th69 - Mo 05.06.17 12:06
Mir ist das klar ;-)
tomycat - Mo 05.06.17 15:23
Das mit dem merken von "Wo war zuletzt der Cursor" ist ein guter Ansatz. Aber ich in meinem Projekt viele Textboxen und Viele Buttons.
Ok, andere Idee:
Button xy Soll den Tastenanschlag 1 simulieren. Sprich Cursor ist in Textbox A, ich klicke auf Button xy.Dann soll eine 1 in der Textbox a drin stehen.
Geht das einfacher?
C# - Mo 05.06.17 15:48
Hey,
es ist kein Problem wenn du viele TextBoxen hast. Du musst ja nicht jede einzelne manuell prüfen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| using System; using System.Linq; using System.Windows.Forms;
namespace WinForms { public partial class Form1 : Form { private TextBox lastFocusedTextBox;
public Form1() { InitializeComponent(); SubscribeToFocusChange(Controls); }
private void SubscribeToFocusChange(Control.ControlCollection controls) { foreach (var control in controls.OfType<Control>()) { if (control is TextBox) ((TextBox) control).GotFocus += OnTextBoxFocused; else SubscribeToFocusChange(control.Controls); } }
private void OnTextBoxFocused(object sender, EventArgs e) { lastFocusedTextBox = sender as TextBox; }
private void button1_Click(object sender, EventArgs e) { lastFocusedTextBox.AppendText("1"); } } } |
Ich denke die Kommentare im Code sollten eindeutig sein. Dieses Snippet (genauer die Methode
SubscribeToFocusChange) sucht in deiner kompletten Form nach allen TextBoxen und fügt denen dann einen EventHandler für das GotFocus-Event hinzu. Sobald dann eine TextBox den Fokus erhält, wird diese in der Variable
lastFocusedTextBox gespeichert.
//Nachtrag
Das ist genau das, was Ralf gemeint hat (mit Ausnahme des
Leave bzw.
LostFocus Events)
tomycat - Mo 05.06.17 19:16
thx all,
hab die LÖsung:
Ralf Jansen - Mo 05.06.17 19:45
Das ist eher eine Lösung für ein anderes Problem ;)
Wenn du SendKeys im Click Event eines Buttons benutzt sendest du das Zeichen an den Button da der Button den Focus haben wird. Also sollte sich die Beschriftung des Buttons ändern.
Wenn es doch funktioniert dann hast du irgendein wichtiges Detail verschwiegen.
tomycat - Di 06.06.17 18:59
... Naja es ist ein Bild, wenn ich drauf Klicke wird eine Funktion ausgeführt. Zur einfacherung habe ich Button geschreiben, ich denke mal es läuft auf gleiche hinaus. Der Send Befehl geht.
Ralf Jansen - Di 06.06.17 20:06
Das hat hier ja auch einen gewissen dokumentarischen Zweck. Jemand der das hier auf der Suche nach Hilfe findet könnte glauben es geht was es mit einem Button nicht tut.
Wenn du eine PictureBox meinst auf die du klickst dann ja das geht weil eine PictureBox eben keinen eigenen Focus hat (heißt nebenbei auch das deine UI nicht tastaturbedienbar ist wenn du das nicht explizit selber ausprogrammierst)
Zitat: |
Zur einfacherung habe ich Button geschreiben, ich denke mal es läuft auf gleiche hinaus |
Nun ja deine ~Vereinfachung~ hat dazu geführt das alle versucht haben ein Problem zu lösen (wie geht man mit dem Foxuswechsel um) das du gar nicht hattest ;)
Ist also eher nicht das gleiche.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!