posílání hodnot mezi formuláři ve Win Mobile   zodpovězená otázka

VB.NET

Zdravím,

mám takový problém, potřebuji v programu, kde jsou formuláře typu "menu", "nastavení" a "program", dostat do formuláře "menu" hodnoty z nastavení, které si uživatel nastaví podle sebe.

Řešil jsem to tak, že jsem si v globálním nastavení form. nadeklaroval pole do kterého se měly po zavření "nastavení" uložit změny, jenže! Když jsem se chtěl v kódu "nastavení" odkázat na pole v "menu" tak jej vůbec neviděl. Prosím o radu. Díky za cokoliv

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Zaprvé váš dotaz absolutně nedává smysl, zadruhé deklarovat cokoliv globálně je blbost.

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

a proč by to byla blbost?

Public Class Form1
    Dim pole() As Integer

Private Sub ukoncit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ukoncit.Click
        Me.Close()
    End Sub

End class

Jde mi o to, že nevím jak z jednoho formuláře přesunout hodnotu třeba z textboxu do druhého formuláře

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

Blbost je to, jak byl formulován původní dotaz. Předávání dat mezi instancemi různých tříd lze řešit mnoha způsoby, například předáním reference na třídu B v konstruktoru třídy A a následným voláním vlastností třídy B z předané reference.

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

Začněte tím, že si uděláte třídu Settings, pro každou položku nastavení uděláte propertu a pak si uděláte do té třídy metody Load a Save, které nastavení načtou respektive uloží.

Load bude statická, vytvoří nový objekt Settings, naplní ho a vrátí. Save bude normální metoda, která autkální objekt uloží.

V hlavním okně si při startu nastavení načtete do nějaké vlastnosti a pokud otevřete nějaké další okno, tak si do něj uděláte taky vlastnost Settings a předáte do ní ten objekt.

Okno pro nastavení si pak načte položky nastavení do komponent a při uložení je zase vrátí do toho objektu a zavolá Save.

Globální proměnné nepoužívejte, ono je to sice pohodlné, ale nakonec pak nevíte, odkud do té proměnné saháte a pak máte v aplikaci kód, který dělá stejné nebo podobné věci, ale není na jednom místě (třeba ve třídě Settings), ale rozcamdaný po celé aplikaci.

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

Nevím, zda jsem problém správně pochopil. Já takový případ řeším jednoduše. Uvádím dvě možnosti (přes proměnnou a přímo).

První formulář:

Public Class Form1
    ' Private a As String ' v případě, že chcete text do proměnné - nutno dimenzovat jako public
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' a = TextBox1.Text 'načtení proměnné po vyplnění texboxu
        Form2.Show()  'zobrazí druhý formulář
    End Sub
End Class

Druhý formulář:

Public Class Form2
     Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Label1.Text = Form1.a  'načte proměnnou z form1
        Label1.Text = Form1.TextBox1.Text 'načte text přímo z texboxu ve form1
    End Sub
End Class

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Takhle to sakra právě nedělejte, to je prastarý přístup z VB6, který odporuje snad všem principům objektově orientovaného programování. Pak nevíte, na kterou proměnnou odkud saháte a blbě se v tom hledají chyby.

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

Plně souhlasím. Ovšem zhledem k mým začátečnickým zkušenostem a jednoduchosti se mi toto řešení zdá schůdnější. Slibuji ale, že až budu mít chvilku času, prostuduji výše popsaná řešení. Člověk by se měl stále učit.

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

Omluva, chybička se vloudí :-). Správně je definování proměnné v 1. formuláři:

Public a As String

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

jasně tak přesně takhle jsem to chtěl udělat. Jenže jsem měl tu chybu, že jsem nadeklaroval to pole jako Dim a ne jako Public, teď mi to chodí :-D

Díky mnohokrát za každou odpověď

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