Laden...

Focus lässt sich nicht auf TextBox setzen

Erstellt von buyden vor 15 Jahren Letzter Beitrag vor 15 Jahren 844 Views
B
buyden Themenstarter:in
203 Beiträge seit 2007
vor 15 Jahren
Focus lässt sich nicht auf TextBox setzen

Hi, ich habe eine Textbox, die standardmäßig Enabled=false ist. Jetzt soll diese beim Klicken auf einen Button Enabled werden, was ich folgendermaßen umgesetzt habe:


private void tbPlatineAdd_Click(object sender, EventArgs e)
        {
            if (privilegeConfirmed(this.maNummer, "addplatine"))
            {                
                platineBindingSource.AddNew();
                edIdPlatine.Enabled = true;                
                neuerDatensatz = true;
                tbPlatineAdd.Enabled = false;
                tbPlatineDelete.Enabled = false;                
                edIdPlatine.Focus();
            }
            else
            {
                MessageBox.Show("Sie verfügen nicht über die notwendigen Rechte, Platinen anzulegen.",
                   "Aktion verweigert", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

Das funktioniert auch solang ich den Button wirklich drücke.
Wenn ich allerdings die Methode in einer anderen aufrufe, wird alles korrekt abgearbeitet, aber der Focus sitzt auf der Textbox mit dem nächsthöheren TabIndex.


private void frmStammdaten_Load(object sender, EventArgs e)
        {
            tcDaten.SelectedIndex = -1;
            tcDaten.SelectedTab = tcDaten.TabPages[this.tabSheetName];
            if (appendNew)
            {
                switch(tcDaten.SelectedIndex)
                {
                    case 0:
                        {                            
                            tbPlatineAdd_Click(sender, e);                            
                            break;
                        }
                    case 2:
                        {
                            tbMaterialAdd_Click(sender, e);
                            break;
                        }
                    case 3:
                        {
                            tbUnterstuetzungAdd_Click(sender, e);
                            break;
                        }
                    case 4:
                        {
                            tbVarianteAdd_Click(sender, e);
                            break;
                        }
                }
                appendNew = false;                
            }
        }

Hat jemand eine Erklärung dafür?

M
194 Beiträge seit 2008
vor 15 Jahren

Hallo buyden,

Eventuell funktioniert da was mit der Reihenfolge der Events nicht. Ich kann mir vorstellen, dass du in der jeweiligen Funktion zwar die Focus-Anweisung gibst, aber danach noch ein Event gestartet wird, welches den Focus auf das Element mit dem niedrigsten Tabstopp-Index setzt. Wieso setzt du den Tab-Index von deiner Textbox nicht einfach am niedrigsten?

Beste Grüße
MrLeeh

"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de

B
buyden Themenstarter:in
203 Beiträge seit 2007
vor 15 Jahren

Die TextBox hat TabIndex 0 also sollte sie als erstes den Focus bekommen.
In ner anderen Methode setze ich die Focus-Eigenschaft nicht also kann eigentlich auch keine andere Methode dazwischenfunken.

B
66 Beiträge seit 2008
vor 15 Jahren

Du rufst die Funktion tbPlatineAdd_Click explizit beim FormLoad auf. Versuchs mal beim FormShown.

Die Controls befinden sich beim FormLoad eigentlich noch nicht auf dem Formular, deshalb kann auch kein Focus gesetzt werden.

B
buyden Themenstarter:in
203 Beiträge seit 2007
vor 15 Jahren

funktioniert. - also war der aufruf schlicht und ergreifend einfach nur zu früh. blöd.
Dankeschön.