Autor |
Beitrag |
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Mo 05.06.17 10:19
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
|
|
Th69
Beiträge: 4777
Erhaltene Danke: 1054
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 05.06.17 11:07
Hallo,
dafür gibt es die Eigenschaft ActiveControl...
Für diesen Beitrag haben gedankt: tomycat
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: tomycat
|
|
Th69
Beiträge: 4777
Erhaltene Danke: 1054
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 05.06.17 12:06
Mir ist das klar
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: 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#
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: 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:
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)
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Mo 05.06.17 19:16
thx all,
hab die LÖsung:
C#-Quelltext
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: 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
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: Christian S., erfahrener Neuling
|
|