Klasa nie widzi kontrolek

Odpowiedz Nowy wątek
2013-11-14 19:23
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();
        }

    }

}
edytowany 1x, ostatnio: NoWay, 2013-11-14 19:23

Pozostało 580 znaków

2013-11-14 19:31
W2K
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.

edytowany 1x, ostatnio: W2K, 2013-11-14 19:34

Pozostało 580 znaków

2013-11-14 19:54
0

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

Pozostało 580 znaków

2013-11-14 20:39
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

Pozostało 580 znaków

2013-11-14 21:37
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ć.

Pozostało 580 znaków

2013-11-14 23:37
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.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2013-11-14 23:38

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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