Wahrscheinlich werdet ihr mich gleich an irgendwelche Grundkurse verweisen...
Ich habe ein so simples Problem, dass es mich tierisch nervt es nicht herauszufinden:
Angenommen ich habe mehrere Textboxen in einer Form in der C# Express Edition.
Nun dachte ich kann ich allen Textboxen ein Click Event geben,
mit welchem man z.B. den Text in der Textbox markiert, sowas wie:
private void FocusText(object sender, EventArgs e)
{
sender.SelectAll();
}
Kann mir jemand verraten, wie ich mein Programm aufschlaue,
dass mir der Compiler kein...
'object' does not contain a definition for 'SelectAll'
ausspuckt?
Du musst dem Compiler schon sagen, dass 'object sender' eine TextBox ist:
private void FocusText(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
textBox.SelectAll();
}
mfg
Nutze statt eines Casts den AS-Operator. Dieser generiert keine Exception bei einem unerlaubten Casts, sondern liefert NULL.
private void FocusText(object sender, EventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox == null)
return;
textBox.SelectAll();
}
Also der Ausdruck mit dem AS Operator liest sich auch für meinen Anfänger-Geschmack besser als der vorige.
Das heißt, wenn ich 'sender' in der Laufzeit noch nicht mit einer konkreten Objektvariable verbunden habe, kann ich eigentlich nur mit getType herausfinden, was es ist, sonst aber nicht auf seine Eigenschaften zugreifen, richtig?!?
Hallo ich möchte ebenfalls mit einem click event auf eine text box eine Methode aufrufen. Jetzt ist es aber so das ich nur den Inhalt der textbox im object sender stehen habe. Ich bräuchte aber auch den Textboxnamen.
Wie kann ich dies nun realisieren?
Gruß JHK
Hallo jhk,
((TextBox)sender).Name
Auf sowas musst du aber bitte lernen selber zu kommen, so naheliegend, wie das ist.
Warum willst du denn den Namen haben? Klingt nach einer eher schlechten Idee, die du im Sinn hast.
herbivore
Ja hast ja recht herbivore!!!!!! Aber sitze wahrscheinlich zu nah vorm Rechner und hatte ein Brett vorm Kopf 🤔
Also ich arbeite grade an einer Visualisierung einer Steuerung die halt über OPC kommuniziert. Das ganz soll so modular sein das nur auf den Formen welche die Prozessbilder enthalten sollen Modifikationen vorgenommen werden sollen. Ist ja auch logisch.
Somit habe ich für ein Clickevent auf einer TextBox halt ne Methode welche dann für alle gelten soll bzw. wenn es ne möglich keit gibt dies noch nicht mal obhängig davon ist ob es ne tesxtbox ist oder etwas anderes.
jetzt zum eigentlich Teil:
Um jetzt natürlich ein OPC Item zu ändern muss ich ja wissen wie es heißt daher meine Idee die textboxen wie die Entsprechenden OPC Items zu benennen.
Hört sich wahrscheinlich kompliziert an ist es wahrscheinlich auch .....
Gruß JHK
P.S: Wenn ich schwachsinn schreibe einfach knallhart drauf hinweisen =)
Hallo jhk,
du solltest dir besser das zu der TextBox gehörige OPC-Item in TextBox.Tag merken. So kannst du ohne Umweg über den Namen zugreifen. Casten musst du natürlich auch hier.
herbivore
Danke für den Tip!
Gib es denn eine Möglichkeit die Methode so zu programmieren, dass sie unabhängig von der Windowscontrols ist?
Gruß JHK
P.S.: Danke im voraus damit ist mir dann ersteinmal geholfen.
Hallo jhk,
ja, wenn du nicht auf TextBox, sondern auf Control castest. Tag gibt es in allen Controls.
herbivore