myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Optimieren von Code einiger GUI-Elemente durch einen Hilfstext
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Optimieren von Code einiger GUI-Elemente durch einen Hilfstext

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
mjohne
myCSharp.de-Mitglied

Dabei seit: 22.11.2019
Beiträge: 2
Entwicklungsumgebung: Visual Studio 2019


mjohne ist offline

Optimieren von Code einiger GUI-Elemente durch einen Hilfstext

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo!

Mein Titel dieses Beitrags mag etwas sperrig klingen, da ich nicht wusste, wie man es besser ausdrücken kann, aber ich komme gleich zur Sache.

Folgende Methode SetStatusbar_Enter(object sender, EventArgs e) wird aufgerufen, wenn bestimmte GUI-Elemente wie Label, Textbox, Picturebox, ... den Fokus durch einen Cursor (z. B. Mauscursor) erhalten. Diese Methode bewirkt, dass ein kleiner Informations- bzw. Hilfstext in einer Statusbar angezeigt wird. Sobald das jewelige GUI-Elemente keinen Fokus mehr hat, wird der Informationstext wieder gelöscht. Der Informationtext selbst in der AccessibleDescription des jeweiligen GUI-Elemente gespeichert. Die Methode SetStatusbar_Enter(object sender, EventArgs e) sieht wie folgt aus:

C#-Code:
private void SetStatusbar_Enter(object sender, EventArgs e)
{
  if (sender is TextBox)
  {
    SetStatusbarText(text: ((TextBox)sender).AccessibleDescription);
  }
  else if (sender is Button)
  {
    SetStatusbarText(text: ((Button)sender).AccessibleDescription);
  }
  else if (sender is RadioButton)
  {
    SetStatusbarText(text: ((RadioButton)sender).AccessibleDescription);
  }
  else if (sender is CheckBox)
  {
    SetStatusbarText(text: ((CheckBox)sender).AccessibleDescription);
  }
  else if (sender is DateTimePicker)
  {
    SetStatusbarText(text: ((DateTimePicker)sender).AccessibleDescription);
  }
  else if (sender is Label)
  {
    SetStatusbarText(text: ((Label)sender).AccessibleDescription);
  }
  /** gekürzt **/
}

Bei der Quellcodeanalyse (in Visual Studio 2019) wird mir nun folgender Hinweistext angezeigt:

Fehlermeldung:
CA1800: Der 'sender'-Parameter wird in der 'MainWindow.SetStatusbar_Enter(object, EventArgs)'-Methode mehrmals in den Typ 'TextBox' umgewandelt. Führen Sie eine Zwischenspeicherung des Ergebnisses des as-Operators oder eine direkte Umwandlung durch, um die überflüssige castclass-Anweisung zu entfernen.

Gleicher Hinweismeldung tritt mehrmalig statt für eine Textbox auf einen Button, einen Label... auf.

Nun stehe ich etwas auf dem Schlauch. Wie kann die obere SetStatusbar_Enter(object sender, EventArgs e) unter Anwendung der Hinweismeldungen noch weiter optimiert werden? Habt ihr ein kleinen Codeschnipsel als Beispiel parat?
22.11.2019 12:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

 Type testing with pattern matching

C#-Code:
object a = 1;
if (a is int b)
{
   Console.Write("Int: " +b);
}

AccessibleDescription kommt von Control.
Wieso verwendest Du also nicht die Basisklasse?
Würde hier viel redundanten Code sparen.
22.11.2019 12:30 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.241
Herkunft: Leipzig


MrSparkle ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Den as-Operator kannst du so verwenden:

C#-Code:
var textbox = sender as TextBox;
if (textbox != null)
{
  SetStatusbarText(text: textbox.AccessibleDescription);
}

Du kannst dir aber diese ganzen Konvertierungen und Abfragen sparen, da die  AccessibleDescription-Eigenschaft zur Klasse Control gehört, und alle Steuerelemente davon erben. Daher brauchst du nur einmal zu casten:

C#-Code:
SetStatusbarText(text: ((Control)sender).AccessibleDescription);
22.11.2019 12:33 Beiträge des Benutzers | zu Buddylist hinzufügen
mjohne
myCSharp.de-Mitglied

Dabei seit: 22.11.2019
Beiträge: 2
Entwicklungsumgebung: Visual Studio 2019

Themenstarter Thema begonnen von mjohne

mjohne ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für eure Hinweise! Sie haben mir geholfen, dass Problem auf einfache Weise zu lösen.
23.11.2019 01:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 07.12.2019 18:17