Dědičnost komponenty GroupBox   otázka

VB.NET

Dobrý den, potřeboval bych nově vytvořenému GroupBoxu přiřadit stejné vlastnosti jako má jiný. Chtěl bych mu dát stejné komponenty, stejnou velikost. Prostě něco jako ho zkopírovat a dát ho na jinej formulář.

Já to mám takto, ale to se GroupBox1 smaže a přesune se na druhý form.

Dim PF as new form
Dim GB as new GroupBox
    
GB = GroupBox1     'GroupBox1 je ten který chci kopírovat

        PF.Controls.Add(GB)
        PF.Show()

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zapomněl jsem se přihlásit.

A ještě aby měl PF.Name ="NovyForm" a GB.Name ="NovyBox"

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V návrhovém režimu není problém GroupBox zkopírovat a vložit pomocí schránky (Ctrl+C, Ctrl+V) včetně jeho obsahu a všech vlastností. Pokud to chcete provést za běhu aplikace, nezbude vám než ručně vytvořit novou instanci GroupBoxu včetně jeho obsahu a nastavení všech vlastností... Pojem dědičnost vyjadřuje uplně něco jiného.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vždyť uvedený kód udělá za běhu programu žádané:

"Chtěl bych mu dát stejné komponenty, stejnou velikost. Prostě něco jako ho zkopírovat a dát ho na jinej formulář."

A požadavek na jména stačí dát do kódu tak, jak jste v dalším dotazu napsal:

 Public Class Form1
   Private Sub Form1_Load(ByVal sender As System.Object, _
         ByVal e As System.EventArgs) Handles MyBase.Load
     Dim PF As New Form
     Dim GB As New GroupBox
     GB = GroupBox1     'GroupBox1 je ten který chci kopírovat
     PF.Controls.Add(GB)
     PF.Name = "NovyForm"
     GB.Name = "NovyBox"
     PF.Show()
     MsgBox(PF.Name & ", " & GB.Name)
   End Sub
 End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se, přehlédl jsem: "...ale to se GroupBox1 smaže a přesune se na druhý form"

Vidím, že nechápu "new", měl bych zato, že vznikne nový prvek

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, New vytvoří nový prvek do proměnné GB, ale pak do této proměnné přiřazujete hodnotu proměnné jiné. Je to stejné, jak když vytvoříte proměnnou a s počáteční hodnotou 5, pak do ní ale přiřadíte 3 a nakonec se divíte, že tam ta 5 není.

Rozdíl mezi běžnými proměnnými (typu Integer atd.) a objekty je ten, že když máte a a b typu Integer a uděláte a = b, pak se hodnota a přepíše hodnotou z b, ale když změníte a, s b se nic nestane. Když to ale uděláte s objektem, tak se objekt nezkopíruje z jedné proměnné do druhé, objekt fyzicky existuje jenom jednou a v proměnných jsou na něj vždycky jenom odkazy. Když tedy přiřadíte do a hodnotu b, způsobíte tím, že obě dvě budou odkazovat na stejný objekt. Změníte něco v a a změní se to i v b.

Proto daný kód také přesune komponentu z jednoho formuláře do druhého, jedna komponenta nemůže být zároveň v obou najednou.

Nejelegantnější by bylo vytvořit si novou třídu, kterou zdědíte od třídy GroupBox a v nějaké vhodné události do komponenty nasypete a nastavíte všechny vlastnosti tak, jak potřebujete. Potom tuto komponentu akorát přidáte na formuláře normálně v návrhovém režimu, jako kdyby to bylo úplně obyčejná komponenta.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Děkuji za vysvětlení.

Možná jsem se měl zeptat jinak, protože mě jde o tisk toho co mam v GroupBoxu. Chtěl jsem tisknout přes komponentu PrintForm, kterou jsem někde stáhl. Chtěl jsem to udělat tak, že si vytvořím nový formulář a na něho zkopíruji ten GroupBox a vytisknu celou formu. Nenašel jsem totiž zatím nikde nějaký srozumitelný návod na tisk. Kdyby jste někdo věděl kde to najít, tak vás prosím o odkazy. Předem děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Též děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback