odwołanie do wizualnych obiektów formatki z poziomu metody klasy

0

Witam,

mam na formatce 49 obiektów label, od label1 do label49.
Chcę napisać program, który pozwoli w metodzie klasy ustawiać własność 'visible' poszczególnych obiektów wg. parametrów wywołania.
Problem w tym, że poziomu klasy nie mogę odwołać się do obiektów label formatki - obiekty wizualne są niewidoczne, piszę 'label1' i pojawia się pod tym czerowony wężyk!?

Na pewno nie jest tak, że z poziomu klasy nie można odwoływać się do obiektów wizualnych formatki - czegoś nie ustawilem, jak należy. Czego, proszę o podpowiedź?

Pozdrawiam,
Jan

0

Co?

Jeśli dodawałeś kontrolki ręcznie w edytorze graficznym to automatycznie ustawiają się na private(nie dostępne dla innych klas niż ta w której są stworzone) więc otwórz plik z ich deklaracjami powinna być w nim metoda Initialize i tam pozmieniaj na public.
A jeśli sam tworzyłeś to zobacz czy nie masz ustawione ich na private.

2

Rozumiem, że rozkładanie (49!) labeli na formie w Visual Studio brzmi prawie jak programowanie, ale mimo wszystko polecam zaopatrzyć się w jakąś książkę o podstawach. Wtedy może być wiedział, że pola jednej klasy (czym właśnie są te twoje "obiekty wizualne") nie są polami drugiej. Generalnie nie powinno się tego w ten sposób robić, ale doraźne rozwiązanie to zmiana modyfikatora dostępu kontrolek na public i przekazanie referencji formy do twojej klasy.

0

Zadanie domowe odrobiłem!
Wszystkim dziękuję serdecznie za wskazanie drogi!
Piszę program w C# do obliczeń parametrów układów lampowych – siedzę we wzorach, czwórnikach, typach lamp, etc. Kto miał na studiach wykład z elektroniki, wie o czym mówię. C# jest w tym momencie dla mnie trudnym narzędziem, którym jestem zafascynowany.

  1. Mam formę Form1 zawierającą jedną etykietę i dwa przyciski, w pliku ‘Form1.designer.cs’ ustawiłem ‘public’ w miejsce generowanego automatycznie ‘private’:

public void InitializeComponent()

public System.Windows.Forms.Label label1;
...
this.label1.Text = "label1";
...

public System.Windows.Forms.Button button1;
public System.Windows.Forms.Button button2;

  1. Buduję klasę ‘klasa1’:

class klasa1
{
public klasa1(ref Label lab1 )
{
lab1.Text = "xxxxxx";
}
}

Wywołanie klasy następuje z przycisku pierwszego:

private void button1_Click(object sender, EventArgs e)
{
klasa1 k1 = new klasa1(ref label1);
}
Działa. Etykieta zmienia wartość. Referencja działa, jak należy.

  1. Buduję klasę ‘klasa2’:

class klasa2
{
public klasa2(ref Form F1)
{
F1.Show();
//label1.Text = "XXXXXXXXX";
}

Wywołanie obiektu klasy następuje z przycisku drugiego:

private void button2_Click(object sender, EventArgs e)
{
Form F1 = new Form1();
klasa2 k2 = new klasa2(ref F1);
}

Działa. Otwiera się nowe okno z nową formatką F1 dokładnie w postaci Form1.

  1. Mam takie pytanie: skoro do obiektu klasy2 przekazałem referencję formy Form1, to dlaczego nie mogę pisać bezpośrednio w metodzie tej klasy:

label1.Text = "xxxxxxx";

Czegoś tu nie rozumiem, czy przekazanie referencji do formy nie jest równoznaczne z przekazaniem referencji do obiektów tej formy?

  1. Jak zgasić formatkę Form1, kiedy otwarła się ona w nowym wcieleniu F1?
    I jak ją powrotem wyświetlić, kiedy zamknie się F1?

  2. Jak rozumiem, to rozwiązanie określone, jako ‘doraźne’ nie jest w pełni w duchu metodologii obiektowej.
    Należałoby zadeklarować klasę z własną definicją formatki z jej wszystkimi wymaganymi obiektami w konstruktorze i z poziomu metod klasy sterować zawartością i wizualizacją poszczególnych jej obiektów.

1
  1. Mam takie pytanie: skoro do obiektu klasy2 przekazałem referencję formy Form1, to dlaczego nie mogę pisać bezpośrednio w metodzie tej klasy:

label1.Text = "xxxxxxx";

Czegoś tu nie rozumiem, czy przekazanie referencji do formy nie jest równoznaczne z przekazaniem referencji do obiektów tej formy?

A co to są obiekty formy?
Chyba masz na myśli jej atrybuty.
Poza tym zrobiłeś public buttonom, a chcesz zmieniać labely. Po co w ogóle zrobiłeś public buttonom?

Czy wiesz w ogóle jaka jest róznica między public a private, czy tak sobie losowo zmieniasz i dziwisz się, że nie działa?

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