Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
ostrozan
Tvůrce
Avatar
ostrozan:16.10.2013 13:41

Ahoj
pomalu se prokousávám tutoriálem C# a jsem zhruba někde u dědičnosti a kolekcích, tak jsem si zkusil takovou jednoduchou aplikaci na procvičení, ale jaksi se mi nedaří.

třída Form1:

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

namespace TestListuLabelu
{
    public partial class Form1 : Form
    {

      //  private List<Label> labelList;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Class1 cl1 = new Class1();

            cl1.PrepisLabely("raz", "dva", "tri");//
        }
        /*
        private void PrepisLabely(string a, string b, string c)
        {
            List<Label> labelList = new List<Label>();
            labelList.Add(label1);
            labelList.Add(label2);
            labelList.Add(label3);

            labelList[0].Text = a;
            labelList[1].Text = b;
            labelList[2].Text = c;
            label4.Text = "ahoj";
        }*/
    }
}

a třída Class1, která by měla dědit z Form1:

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


namespace TestListuLabelu
{
    class Class1:Form1
    {
        private List<Label> labelList;

        public Class1()
        {
            this.labelList = new List<Label>();
            labelList.Add(label1);
            labelList.Add(label2);
            labelList.Add(label3);
        }

        public void PrepisLabely(string a, string b, string c)
        {
            labelList[0].Text = a;
            labelList[1].Text = b;
            labelList[2].Text = c;
            label4.Text = "ahoj";
        }

    }
}

Potíž je s labely z Form1 - sice mně je to nechá přiřadit do kolekce v třídě Class1, ale debugger mi pak ukáže, že tam vlastně nejsou.

ještě přidám celý projekt

 
Odpovědět
16.10.2013 13:41
Avatar
ostrozan
Tvůrce
Avatar
ostrozan:16.10.2013 13:46

jaksi jsem nepochopil vkládání příloh ?!

 
Nahoru Odpovědět
16.10.2013 13:46
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na ostrozan
Petr Nymsa:16.10.2013 13:46

Jaký důvod máš dědit z Form 1 ?

Editováno 16.10.2013 13:46
Nahoru Odpovědět
16.10.2013 13:46
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na ostrozan
Jan Vargovský:16.10.2013 15:09

Už jenom to, že si nastavil těm labelům public je blbost. Proč zveřejňuješ celý label ? Když ti stačí jeho text ?

Pak to, že dědíš z Formu neznamená, že je to taky ta instance ... Vytváříš sice celý Form1 jakoby znova, ale je tam všechno uplně jinak. Takže jestli chceš udělat to co děláš teď, tak si udělej vlastnosti na ty texty těch labelů, popřípadě přidej jejich reference skrz ten list (když chceš pracovat s kolekcemi) a tu si až proiteruj a zmeň ty labely.

Je to to samé, jako bys passoval nějaké data z formu1 do formu2, je to úplně ten samý princip, jen tady budeš předávat nějakou kolekci, popřípadě celý odkaz na Form1 (toto je ale zbytečné)

 
Nahoru Odpovědět
16.10.2013 15:09
Avatar
ostrozan
Tvůrce
Avatar
ostrozan:17.10.2013 12:49

důvod je takový, že jsem chtěl zkusit, jestli potomek (Class1) může pracovat s objekty rodiče (Form1)

To že stačí z celého labelu jen text je samozřejmě pravda - v tomto jednoduchém případě - co když ale budu chtít měnit víc věcí (třeba visible,back color atd..).

Mimochodem jak jsi došel na to, že jsou labely public?
Ve Form1 jsou protected kvůli dědění a jejich kolekce v Class1 je private.
Veřejná je jen metoda, která má přepsat jejich texty.

Já měl za to, že labelList.Add(la­bel1);vytvoří referenci na label1, ale takhle to vypadá, že to je kopie label1 ve které se text změní ale v původní - fyzicky na formuláři už ne.

Byl to ale jenom test - nejjednodušší je samozřejmě metody pro změny vlastností umístit do stejné třídy.

Jinak omluvte pokud napíšu nějaký nesmysl - bude to tím, že jsem si některé věci vyložil jinak, než jak je autor tutoriálu zamýšlel.

 
Nahoru Odpovědět
17.10.2013 12:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.