Klasa nie widzi kontrolek

0

Witam!
Mam taki oto program, chcę w klasie zadeklarowanej zmienić Text któregoś z labeli, jednak mam taki problem. Program w klasie nie widzi tych kontrolek (labeli), mam je ułożone na formie graficznie. Prosiłbym o podanie ja kto zrobić, aby działało, szukałem po internecie, jednak nic nie chciało mi zadziałać, bądź nie rozumiałem o co chodzi.
Oto kod:

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace kjh
{
    public class MyThreadClass
    {

        public MyThreadClass()
        {
        }



        public void Run()
        {
            label14.Text = "tekst";
            label15.Text = "tekst";
            Thread.Sleep(500);
            label16.Text = "tekst";
        }
    }


    public partial class kjh : Form
    {


        public kjh()
        {
            InitializeComponent();

            MyThreadClass oMyThreadClass = new MyThreadClass();
            Thread oThread = new Thread(new ThreadStart(oMyThreadClass.Run));
            oThread.Start();
            label13.Text = "Oczekiwanie na zakończenie wątku...";
            oThread.Join();
        }

    }

}

0

Domyślnie pola odpowaidające za kontrolki mają pola z modyfikatorem private więc są niewidoczne poza klasą Form. W usatwieniach kontrolki zmień pole Modifier na public.

Poza musisz do swojej klasy przekazać jakoś referencję do obiektu Form bo inaczej nie możesz uzyskać dostępu do kontrolek.

Inna sprawa że to kod wielowątkowy więc prosty dostęp do kontrolek jak tu chcesz zrobić spwooduje wyjątek.

0

a jak to ominąć? I w którym miejscu przekazać referencję do obiektu Form?

0

W konstruktorze MyThreadClass, ale nawet jeśli to zrobisz to nie możesz tak po prostu zmieniać labelek z innego wątku. http://www.pzielinski.com/?p=77

0

wszystko dobrze, pokazane jak to napisać. Tylko nie ma mowy o tym, jak się odwołać. :/ w ogóle tego nie rozumiem, jeśli ktoś potrafi, to niech wytłumaczy to dokładnie, co gdzie ma być, w którym miejscu to wrzucić, jak się odwołać.

0
NoWay napisał(a):

w ogóle tego nie rozumiem, jeśli ktoś potrafi, to niech wytłumaczy to dokładnie, co gdzie ma być, w którym miejscu to wrzucić, jak się odwołać.

Utwórz w klasie MyThreadClasspole typu kjh i ustaw je w konstruktorze. A pól w klasie kjh nie czyń publicznymi tylko utwórz metody na nich operujące (enkapsulacja przede wszystkim!). I popracuj nad nazwami klas, bo te są okropne.

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