proměnná a víc formulářů   otázka

VB.NET

Dobrý den,

jsem na foru novy. Je mi 15 a začal jsem se zajimat o praci ve VB.net 2005. Zkouším podle různých návodů dělat jednoduche aplikace. Narazil jsem na problem - mam v projektu dva formuláře. Na jednom jsou nějaké tlačítka a je zde globalně nadefinovaná proměnná. Druhý má taktéž některé prvky a potřeboval bych, aby se za běhu programu hodnota proměnné nadeklarované v tom první formuláři (respektive kódu k němu) načítala do druhého formuláře (respektive komponenty - labelu) na měm. Jak na to? Dovede mi někdo poradit? Uvítal bych ukázku kódu - jsem teprve na začátku. Děkuji. Honza

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

Existují dvě možnosti. Proměnnou v prvním formuláři lze nadeklarovat jako statickou (klíčové slovo Shared), což znamená, že k ní lze přistupovat i bez vytvoření instance třídy ve které je definovaná (formulář). Z programátorského hlediska je to ale prasárna.

Public Partial Class Form1
  Public Shared N As Integer
  Private _childForm As Form2
  Private Sub ShowForm2
    If _childForm Is Nothing Then
      _childForm = New Form2
    End If
  _childForm.Show()
  End Sub
End Class

Public Partial Class Form2
  Private Sub IncrementN
    Form1.N += 1
  End Sub
End Class

Druhá možnost je v konstruktoru druhého formuláře (Sub New) předat platnou instanci prvního formuláře a tak potom bude možné přistupovat k té globální instanční proměnné prvního formuláře.

Public Partial Class Form1
  Public N As Integer
  Private _childForm As Form2
  Private Sub ShowForm2
    If _childForm Is Nothing Then
      _childForm = New Form2(Me)
    End If
    _childForm.Show()
  End Sub
End Class

Public Partial Class Form2
  Private _parentForm As Form1
  Public Sub New (ByVal parentForm As Form1)
    _parentForm = parentForm
  End Sub
  Private Sub IncrementN
    _parentForm.N += 1
  End Sub
End Class

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

a třetí možnost ovšem zastaralá ale funkční je použít MODUL a deklarovat proměnou v něm. Potom můžete mít i 10 formulářů a u všech bude proměnná obsahovat hodnotu zadanou např. v prvním formuláři.

  Public Module Module1

    'proměnná pro vsechny formulare ( pro cely program )
    Public NazevPromenne As String

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

Výsledek bude stejný jako použití statické proměnné protože modul je statická třída. Modul není žádné zastaralé řešení, na mnoho věcí se stále hojně používá.

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

Nie som si istý, či nehľadate náhodou toto:

Public Class Form1
    Public a As String
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        a = "Tak?"
        Form2.Show()
    End Sub
End Class

Public Class Form2
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = Form1.a
    End Sub
End Class

Platí to pre VB.net 2008. Marí sa mi že pre VB.net 2005 treba nadeklarovať Form1. Skús. Napíš.

nahlásit spamnahlásit spam 1 / 1 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