Diskuze: C# - dědění z Form1

C# .NET .NET (C# a Visual Basic) C# - dědění z Form1 American English version English version

Avatar
ostrozan
Redaktor
Avatar
ostrozan:

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
Redaktor
Avatar
ostrozan:

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

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

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ý
Redaktor
Avatar
Odpovídá na ostrozan
Jan Vargovský:

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
Redaktor
Avatar
ostrozan:

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.