Odwołanie się do kontrolek z klasy

0

Witam.
Mam problem, niby błahy, ale nie mogę sobie z nim poradzić.
Chciałbym się odwołać do kontrolki z innej klasy i zmienić jej wartość (tekst).
Próbowałem już tak

public string Label4Value
        {
            get { return this.label4.Text; }
            set { this.label4.Text = value; }
        } 

i tak

Form1 f = new Form1();
f.label4.Text = "1"; 

I żaden z tych sposobów nie działa.
Jak to więc zrobić?

0

Na przykład coś takiego? Nie wiem, czy o to ci chodzi:

using System;
using System.Windows.Forms;

namespace test
{
    public partial class Form1 : Form // w tej klasie masz powiedzmy ten label na który odziałujesz za pomocą innej klasy 
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            FooBar t = new FooBar();
            t.bar = "Hello";
            t.bar1 = "It's me";

            t.Foo(label1); //zmiana na wartosc "HelloIt's me"
        }
    }



    class FooBar
    {
        //jakies stringi
        public string bar { get; set; }
        public string bar1 { get; set; }

        //do zmiany wartosci np. labela
        public void Foo(Label lab)
        {
            lab.Text = bar + bar1;
        }
    }
}
 
0

Chodzi mi o to, żeby label posłużył za taki, hmm, mini status. Tzn. żeby opisywał co aktualnie robi metoda. Czyli np.
Pobieranie pliku
tekst w lablu zmienia się na "pobieranie"
Kiedy pobieranie się skończy tekst w lablu zmienia się na "pobrano"
itd.
Tak samo jak się odwołać to progressbara?

2

Jeżeli chcesz obserwować tego labela i aktualizować jego tekst z różnych klas, w zależności od tego co te klasy robią, to możesz wykorzystać do tego interfejsy IObserver<T> oraz IObservable<T>.

Pierwszy z tych interfejsów implementujesz w klasie, która przechowuje Label. ta klasa będzie obserwować obiekty typu string w klasach, które implementują interfejs IObservable<string>

Do zmian statusu posłuży Ci metoda OnNext z interfesu IObserver<string>:

public void OnNext(string value)
{
     this.MyLabel.Text = value;
}

Natomiast każda klasa, która ma zmienić status będzie musiała wywołać tę metodę u siebie kiedy zajdzie taka potrzeba np:

string status = "Hey! Status Changed!";
foreach(var observer in this.Observers) observer.OnNext(status);

// Gdzie this.Observers to List<IObserver<string>>

Oczywiście zamiast listy obserwatorów możesz zrobić tylko jednego - powyżej jest tylko przykład.
Więcej doczytaj sobie z MSDN i z googla wpisując nazwy tych interfejsów, bo artykułów o tym jest masa.

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