Laden...

sendkey an dynamisch erstellte textbox?

Erstellt von demondriver235 vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.934 Views
D
demondriver235 Themenstarter:in
496 Beiträge seit 2005
vor 17 Jahren
sendkey an dynamisch erstellte textbox?

guten morgen!

ich müsste beim klick auf einen button ein bestimmten string z.b. "x" an das zuvor aktive steuerelemet schicken, da bei button klick ja der button zum activen steuerelement wird.

nun kann ich aber das element an das der string gesendent werden soll nicht einfach benennen z.b.

textbox1.Focus();
SendKeys.Send("x");

funktioniert nicht da die textbox erst zur laufzeit erstellt wird.

jemand eine idee?

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

F
722 Beiträge seit 2005
vor 17 Jahren

naja, aber du vergibst ja vermutlich namen für deine controls wenn du sie erstellst. dann kannst du so vorgehen:

form.Controls["textBoxName"].Focus();

D
demondriver235 Themenstarter:in
496 Beiträge seit 2005
vor 17 Jahren

das schon aber woher weiß ich denn welches control vorher aktiv war?

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

D
demondriver235 Themenstarter:in
496 Beiträge seit 2005
vor 17 Jahren

keiner?

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

K
56 Beiträge seit 2006
vor 17 Jahren

wenns dafür keine methode gibt bastel dir doch nen Trigger der den Namen/ID des zuletzt aktiven Steuerelement speichert.

D
demondriver235 Themenstarter:in
496 Beiträge seit 2005
vor 17 Jahren

das ist genau das was ich machen möchte aber in welcher property kann ich denn das active steuerlement abfrage?

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

K
56 Beiträge seit 2006
vor 17 Jahren

leider hab ich gerade keine IDE vorliegen.... aber evtl. gibt es was unter this.Controls zu finden.

Ausm Kopf würde ich sagen... müsstest du die eine Methode schreiben die du dann in dem click event aufrufst. In dieser müsstest du über den sender das object bekommen und dementsprechend auch den namen bzw. die ID.

Klingt für mich bischen umständlich weshalb du evtl. noch auf andere antworten warten solltest 😉

mfg

D
demondriver235 Themenstarter:in
496 Beiträge seit 2005
vor 17 Jahren

so in die richtung hab ich auch gedacht...

ich wollte event bei maus enter auslösen welches per getter setter das zu dem zeitpunkt aktive steuerelement speichert

und dann bei click jenes anspricht aber ich finde einfach keine möglichkeit das active control abzufragen )-:

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

K
52 Beiträge seit 2006
vor 17 Jahren
Beispielcode

        //speichert den Namen der Control als string
        private string lastControl = "";

        public Form1()
        {
            InitializeComponent();
            textboxenErstellen();
        }

        //Knopf, der Aktion auslöst
        private void button1_Click(object sender, EventArgs e)
        {
            if (lastControl != "")
            {
                //der Name des zulest aktiven Controls wird abgerufen
                this.Controls[lastControl].Select();
                SendKeys.Send("x");
            }
        }

        //Die Controls, die den Befehl vom Knopfdruck entegennehmen können sollen
        //Event bei verlassen der Maus (wenn das Objekt vorher auch selektiert wurde)
        private void Control_MouseLeave(object sender, EventArgs e)
        {
            Control c = (Control)sender;
            if (c == this.ActiveControl) this.lastControl = c.Name;
        }

        private void textboxenErstellen()
        {
            //neue Textbox erstellen
            TextBox t = new TextBox();
            //Position und Größe definieren
            t.Location = new System.Drawing.Point(80, 160);
            t.Size = new System.Drawing.Size(100, 20);
            //Namen geben und Event festlegen
            t.MouseLeave += new System.EventHandler(this.Control_MouseLeave);
            t.Name = "tb1";
            //Textbox zu Controls der aktiven Form hinzufügen
            this.Controls.Add(t);

            //neue Textbox erstellen
            t = new TextBox();
            //Position und Größe definieren
            t.Location = new System.Drawing.Point(80, 30);
            t.Size = new System.Drawing.Size(100, 20);
            //Namen geben und Event festlegen
            t.MouseLeave += new System.EventHandler(this.Control_MouseLeave);
            t.Name = "tb2";
            //Textbox zu Controls der aktiven Form hinzufügen
            this.Controls.Add(t);
        }
       
D
demondriver235 Themenstarter:in
496 Beiträge seit 2005
vor 17 Jahren

yes! thats it, du bist mein kumpel!!

das ist genau was ich gesucht hab!
Control c = (Control)sender;

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

4.221 Beiträge seit 2005
vor 17 Jahren

Statt lastControl könntest Du aber auch direkt eine Referenz auf das Control speichern (Control c = (Control)sender😉

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

D
demondriver235 Themenstarter:in
496 Beiträge seit 2005
vor 17 Jahren

danke an alle. funktioniert!

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."