Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: samojen muuttujien käyttö moduuleissa

Sivun loppuun

Rautakivi [27.06.2006 19:57:04]

#

Ajattelin selkeyttää koodiani laittamalla todella pitkät koodinpätkät omiin moduuleihinsa. Ongelmaksi nousi se, että Form1:llä esiteltyihin muuttujiin ei voi viitata moduulissa kuten ei myöskään Form1:n textboxeihin yms. Eli millä tavalla muuttujat tulee alustaa Form1:ssä siten, että niistä tulee julkisia ja ne näkyvät myös moduuleissa tai millä tavalla moduuli tulee luoda?

Kyseessä on vb.net 2003

Merri [27.06.2006 20:05:40]

#

Perusteethan menee niin, että moduulissa on kaikki julkiset funktiot. Moduuleista kyllä sitten pystyy pääsemään käsiksi formien tietoihin, mikäli tämä ei ole muuttunut VB6:sta .NETiin, niin Form1.Text1.Text pitäisi toimia.

Muuttujat kannattaa asettaa niin, että ne ovat moduuleissa ja niissä julkisia. Formeissa kannattaa välttää liikoja julkisia asetuksia, sillä ne vaikeuttavat ohjelman toiminnan hahmottamista (varsinkin silloin kun palaa pitkän tauon jälkeen uudelleen koodin pariin).

Voisi varmaan ajatella asian siten, että formeihin ei laiteta mitään olennaista koodia. Ne toimivat vain käyttöliittymänä käyttäjän ja pääohjelmakoodin välillä. Käyttöliittymään liittyvää koodia ja tiedon muuttamista ihmisen ymmärtämästä muodosta tietokoneen ymmärtämään muotoon ja samaa päinvastoin. Muuta formiin ei niinkään kannata sijoittaa.

Rautakivi [27.06.2006 20:07:06]

#

Eli esittelen muuttujat jossain moduulissa ja ne näkyvät sitten eri moduuleissa + Form1:ssä, Form2:ssa jne?

Merri [27.06.2006 21:28:23]

#

Jep, ainakin VB6:ssa laittamalla Public Muuttuja As String tekee Muuttuja-nimisen tekstimuuttujan, jota voi käyttää mistä vaan. Samaan tapaan kuin proseduurista tulee julkinen kun sille laittaa Publicin. Vastaavasti Private tai Dim toimii vain "paikallisesti".

Rautakivi [27.06.2006 21:32:07]

#

Muuttujat saan toimimaan nyt jokapaikassa, mutta moduulissa en pysty tekemään mitään esim. Form1:n labeliin. Koitin alla olevalla koodilla ja ei onnistu:

Public Module Module1
    Dim form1 As New Form1
    Public Sub moduuli1()
        Module1.form1.Label1.Text = "asdf"
        'eikä toimi tuo alla olevakaan
        form1.Label1.Text = "asdf"
    End Sub
End Module

Merri [27.06.2006 21:43:43]

#

Tuota, luot uuden Form1-objektin, jota et tuo näkyville ja asetat sen labeliin tekstin asdf.

Sinun pitäisi pystyä käyttämään Form1:htä ihan suoraan. Objektit ovat julkisia, myös Form1. Ellei .NET sitten ole jotenkin todella todella kierosti erilainen.

Rautakivi [28.06.2006 09:45:33]

#

.NETissä ei voi käyttää suoraan form1:stä ellei sitä ensin luo moduuliin tai toiseen formiin

Merri [28.06.2006 10:53:16]

#

Ei helevata, yksinkertaisistakin asioista tehty vaikeita .NETissä... (saan kokoajan huonomman ja huonomman kuvan kielestä, eikä se ole ollut hyvä alkuunkaan).


Tämän verran kyllä löysin:

Public Shared myForm as Form1

' Form_Load:
myForm = Me

Sitten pitäisi pystyä toikkaroimaan tyylillä Form1.myForm; epäloogista, mutta ilmeisesti toimii...

Rautakivi [28.06.2006 18:58:54]

#

Kiitokset!
Jos tästä on muillekin apua niin Form1:een alla oleva:

Public Class Form1
    Inherits System.Windows.Forms.Form
    Public Shared myform1 As Form1

ja moduuli:

Public Module Module1
    Public Sub moduuli1()
        Form1.myform1.Label1.Text = "asdfasdf"
    End Sub
End Module

Muistelen, että VB6:lla tuo on onnistunu helpommin. Moni muukin asia on .NET:llä hankalempi tehä..


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta