3 Stimmen

Umbenennen mehrerer Schaltflächen in einer Schleife in C#

Ich habe ein schiffsähnliches Programm, das ein 10 x 10 Raster von Schaltflächen enthält. Zu Beginn des Programms möchte ich, dass der Text aller Schaltflächen in "---" geändert wird, was anzeigt, dass niemand auf diese Koordinate geschossen hat. Ich kann keine Möglichkeit finden, alle Schaltflächen in einer Schleife umzubenennen. Die Schaltflächen haben alle die Namen b00, b01, b02..., die ihre Koordinaten angeben. Die erste Zahl ist die Zeile und die zweite Zahl die Spalte. (z.B. b69 steht für Zeile 7, Spalte 10).

Ich hoffe, Sie können helfen!

Vielen Dank im Voraus!

Lukas

5voto

alnaji Punkte 473

Sie können auch Folgendes verwenden Erweiterung Methode OfType(), um nach dem angegebenen Typ zu filtern, siehe das folgende Beispiel

foreach (Button btn in this.Controls.OfType<Button>())
   {

   btn.Text="New Name";
   }

Wie Sie sehen können, müssen Sie durch die Verwendung der OfType-Erweiterungsmethode das Steuerelement nicht in den Button-Typ umwandeln.

Ich hoffe, das hilft.

Mit freundlichen Grüßen

1voto

Jay Riggs Punkte 52013

Wie wäre es damit:

    foreach (Control c in this.Controls) {
        if (c is Button) {
            ((Button)c).Text = "---";
        }
    }

Dieses Snippet durchläuft alle Steuerelemente des Formulars ( this ), prüfen Sie, ob es sich um eine Schaltfläche handelt und ob Sie die Eigenschaft Text auf "---" gesetzt haben. Wenn sich Ihre Schaltflächen in einem anderen Container, z. B. einem Panel, befinden, können Sie alternativ die Eigenschaft this.Controls con yourPanel.Controls .

1voto

Devin Garner Punkte 1337

Sie könnten die Liste der Steuerelemente aus dem übergeordneten Container abrufen und in einer Schleife durchlaufen.

Etwa so:

foreach (Control c in myForm.Controls)
{
  if (c is Button)
  {
    ((Button)c).Text = "---";
  }
}

1voto

B Pete Punkte 916

Erwägen Sie, die einzelnen Schaltflächen in eine Liste aufzunehmen:

// instantiate a list (at the form class level)
List<Button> buttonList = new List<Button>();

// add each button to the list (put this in form load method)
buttonList.add(b00);  
buttonList.add(b01);
... etc ...

Dann können Sie eine bestimmte Schaltfläche wie folgt festlegen:

buttonList(0).Text = "---"  // sets b00

Oder alle Knöpfe auf diese Weise:

foreach (Button b in buttonList) {
   b.Text = "---";
   }

Es gibt noch viele andere Möglichkeiten:

  • Die Schaltflächen werden in einem 2D-Array angeordnet, um die Adressierung nach Zeilen und Spalten zu ermöglichen. Sie könnten noch eine foreach über das Array zu tun, um alle auf einmal eingestellt.

  • Erstellung der Schaltflächen (und Einstellung von Größe und Position) progammatisch, damit nicht alle Schaltflächen im Designer erstellt werden müssen. Auf diese Weise könnten Sie auch die Größe des Rasters während der Laufzeit festlegen.

0voto

Gustavo Mori Punkte 8033

In Situationen wie dieser speichere ich die Steuerelemente, die ich häufig verwenden möchte, in einer List oder vorzugsweise ein IEnumerable<> Sammlung, die ich normalerweise bei der Erstellung oder im Load-Event-Handler des enthaltenen Steuerelements initialisiere (z. B. wenn diese Steuerelemente in einer Form oder sind von einem GroupBox ). Auf diese Weise hoffe ich, den Aufwand zu verringern, der entsteht, wenn ich diese Steuerelemente jedes Mal suchen muss, wenn ich diese Sammlung benötige. Wenn Sie dies nur einmal tun müssen, würde ich mir nicht die Mühe machen, die buttons Sammlung.

Also, etwa so:

// the collection of objects that I need to operate on, 
// in your case, the buttons
// only needed if you need to use the list more than once in your program
private readonly IEnumerable<Button> buttons;

Im Konstruktor oder im Load Event Handler:

this.buttons = this.Controls.OfType<Button>();

Und wenn ich diese Steuerelemente aktualisieren muss, verwende ich einfach diese Sammlung:

foreach (var button in this.buttons)
{
    button.Text = @"---";

    // may wanna check the name of the button matches the pattern
    // you expect, if the collection contains other 
    // buttons you don't wanna change
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X