usercontrol - akcja w Form

0

Witam, jestem bardzo początkujący więc proszę o wyrozumiałość,
piszę aplikację w której będę ładował różne UserControl'sy w zależności od tego który będzie potrzebny,

chciał bym za pomocą załadowanego UserControla zmieniać właściwości obiektów z głównego Forma (wykorzystałem panel w którym wywołuje danego UserControla)

w skrócie aplikacja wygląda tak:
user image
granatowy obszar to załadowany UserControl,

chciał bym aby po kliknięciu buttona1 z UserControla zmienić Visible na false dla buttona2 i buttona3 który znajduje się na głównym oknie Form,

jeśli dodaje akcję na guziku button1:

Form1.button3.Visible = false;

to mam komunikat błędu:
'Form1.button3' is inaccessible due to its protection level
zmieniłem więc deklarację buttona3 z private na public, ale teraz mam komunikat
An object reference is required for the non-static field, method, or property
Problem wydaje się błahy ale kładzie mnie na łopatki. Będę bardzo wdzięczny za każdą pomoc.

2

zrób eventa w UserControl a kod manipulujący przyciskami formy umieść tam, gdzie powinien być, czyli w klasie formy.

0

hmm, coś dalej robię źle...

w głównym Formie utworzyłem funkcję:

void pge02butt_Click(object sender, EventArgs e)
{
  button3.Visible = false;
}

a na UserControl akcję do guzika

this.button1.Click += new EventHandler(Form1.pge02butt_Click);

dalej mi krzyczy non-static...

0

Zamień: this.button1.Click += new EventHandler(Form1.pge02butt_Click); na: this.button1.Click += new EventHandler(tnis.pge02butt_Click);
Jeśli do czegoś odwołujesz się przez nazwę klasy, czyli Form1, to oczekuje się, że będzie to pole/właściwość/metoda statyczna.

0

ale przecież funkcja pge02butt_Click istnieje w klasie Form1,
a jak wpisuję this. to mam informację, że taka funkcja nie istnieje w tej klasie (UserControl)

2

Ech, this odwołuje Ci się do TEGO obiektu. Do obiektu, w którym wywołujesz tego this. Ty musisz zrobić sobie delegata, stworzyć zdarzenie w UserControl, a potem na to zdarzenie reagować z poziomu formy. Zdarzenie odpalasz oczywiście po wciśnięciu przycisku w UserControl.

1
mateusz_0854 napisał(a):

ale przecież funkcja pge02butt_Click istnieje w klasie Form1,

Nie w klasie tylko w obiekcie klasy. Poczytaj o metodach instancyjnych i statycznych, bo cały Twój problem polega na tym, że próbujesz metody instancyjnej używać jako statycznej albo odwrotnie.

0

dziękuje wszystkim za pomoc, ;) doedukowałem się z podstaw delegat i eventów i w końcu zrozumiałem gdzie robiłem błąd

1 użytkowników online, w tym zalogowanych: 0, gości: 1