Laden...

Optimieren von Code einiger GUI-Elemente durch einen Hilfstext

Erstellt von mjohne vor 4 Jahren Letzter Beitrag vor 4 Jahren 943 Views
M
mjohne Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren
Optimieren von Code einiger GUI-Elemente durch einen Hilfstext

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:

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?

16.807 Beiträge seit 2008
vor 4 Jahren

Type testing with pattern matching


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.

5.657 Beiträge seit 2006
vor 4 Jahren

Den as-Operator kannst du so verwenden:


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:


SetStatusbarText(text: ((Control)sender).AccessibleDescription);

Weeks of programming can save you hours of planning

M
mjohne Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren

Danke für eure Hinweise! Sie haben mir geholfen, dass Problem auf einfache Weise zu lösen.