Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Tablica przyciskow


Rekomendowane odpowiedzi

Opublikowano

Witam!

Stworzyłem sobie WindowsForm, w którym zamieściłem 9 przycisków. Po nacisniciu jednego z nich chcaiałbym aby pozostałe 8 się ukrywalo. Wiem, że moge to zrobić tak: 

private void button2_Click(object sender, EventArgs e)
{
button4.Hide();
button5.Hide();
button6.Hide();
}

Ale zależy mi, żeby to działało na pętli. Wymyśliłem sobie coś takiego:

string[] Programy = new String[] { "button4", "button5", "button6", "button7", "button8", "button9", "button10", "button11" };

private void button2_Click(object sender, EventArgs e)
{
for (int iCoL = 0; iCoL < 8; iCoL++) 
{
    {
        Programy[iCoL].Hide();
    }
}

Ale niestety pojawia mi się nastepujący bład:

'string' does not contain a definition for 'Hide' and no extension method 'Hide' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)

Rozumiem o co się czepia kompilator, dlatego pytam: Jak inaczej mogę to zrobić?

Demokracja to ustrój, w którym możesz mówić, to co myślisz, nawet wtedy, kiedy nie myślisz.

                                                                              - Edward Rutherford

 

Opublikowano

foreach (var control in Controls.OfType<Button>().Where(control => Programy.Contains(control.Name)))
            {
                control.Hide();
            }

Nie możesz zrobić czegoś takiego jak napisałeś, gdyż wskazujesz tam na łańcuchy znaków, a nie na obiekty typu Button.

 

Ewn w jednej linii ale z dodatkową konwersją na listę:

 

Controls.OfType<Button>().Where(control => Programy.Contains(control.Name)).ToList().ForEach(x => x.Hide());

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim Universum bin ich mir nicht ganz sicher."
~A. Einstein

Opublikowano

Wrzuć referencje do listy, opatrz każdego buttona id'kiem i zrób mniej więcej coś takiego:

private void button2_Click(object sender, EventArgs e)
{
  int buttonId = .... // pobierz id buttona

  for(int i = 0; i < 8; i++)
  {
    if (i == buttonId) continue;
    buttons.get(i).Hide();
  }
}
Opublikowano

        private void Form1_Load(object sender, EventArgs e)

{

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

buttons.ForEach(x => x.Click += (s, args) => buttons.Where(y => !y.Equals(s)).ToList().ForEach(y => y.Hide()));

}

98202a5de3d07cae33740ef91a28287c.gif
Opublikowano

Dzieki wszystkim za pomoc. Mam jeszcze jedno pytanko, a mianowicie jak mogę zrobić tak, aby po naciśnieciu na przycisc właczył mi się np. Form2, ale zeby był ustawiony idealnie na tym glownym Form'ie. Chodzi mi o lokalizacje tego.

Demokracja to ustrój, w którym możesz mówić, to co myślisz, nawet wtedy, kiedy nie myślisz.

                                                                              - Edward Rutherford

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...