usercontrol - akcja w Form

usercontrol - akcja w Form
M0
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 8 lat
  • Postów:9
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:

Kopiuj
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.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:25 minut
2

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

M0
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 8 lat
  • Postów:9
0

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

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

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

a na UserControl akcję do guzika

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

dalej mi krzyczy non-static...

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Wrocław
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.

M0
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 8 lat
  • Postów:9
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)

JU
  • Rejestracja:około 22 lata
  • Ostatnio:2 miesiące
  • Postów:5042
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.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Wrocław
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.

M0
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 8 lat
  • Postów:9
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.