Anfängerfragen zur Variablendeklaration

simauki

Grünschnabel
Hallo, ich bin php-Umsteiger und beschäftige mich jetzt mit VB.net. Habe mir schon verschiedenste Tutorials, Videos und ähnliches reingezogen, aber es sind doch ein paar fragen übrig geblieben.

1. Ich habe ein Array
Code:
Dim test() As Integer = {1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 22, 23}
auf das ich in mehreren Form zugreifen möchte. Unter php konnte man in ein Skript sein Zeugs reinschreiben und es dann per include in einem anderem Skript aufrufen. Wie löse ich das am Besten in VB? Es handelt sich um 40 Arrays, die an verschiedenen Stellen aufgerufen werden sollen.

2. Ich habe mich entschlossen MySQL zu verwenden, weil ich das von php her schon kenne. Dazu habe ich mir das Tutorial http://www.vbmysql.com/articles/vbnet-mysql-tutorials/the-vbnet-mysql-tutorial-part-1 - Teil 5 angeschaut. Funktioniert auch soweit ganz gut, aber im Kapitel 4 versteh ich das mit der Property nicht. Ich habs alles rüberkopiert und angepasst, aber ich bin de rMeinung, das das auch besser gehen muss.

Code des Loginformulars

Code:
Imports MySql.Data.MySqlClient

Public Class LoginForm1

    Private Sub login_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdlogin.Click

        Dim user As String
        user = txtboxusername.Text

        Dim myConnString As String
        myConnString = "server=" & txtboxserver.Text & ";" & "user id=" & user & ";" & "password=" & txtboxpassword.Text & ";" & "database=planspiel"

        Dim conn As MySqlConnection
        conn = New MySqlConnection()
        conn.ConnectionString = myConnString

        Try
            conn.Open()
            conn.Close()

            If chkboxmerken.Checked Then
                My.Settings.User = txtboxusername.Text
                My.Settings.Save()
            Else
                My.Settings.User = ""
            End If

            Form1.Text = "Baumogul für MySQL - angemeldet als " & user
            Form1.EinloggenToolStripMenuItem.Visible = False
            Form1.NeuesSpielToolStripMenuItem.Visible = True
            Form1.SpielLadenToolStripMenuItem.Visible = True
            Form1.AbmeldenToolStripMenuItem.Visible = True

            Me.Close()

            MsgBox("Sie haben sich erfolgreich am System angemeldet.", MsgBoxStyle.Information, "Info")

            Form2.connectionString = myConnString
            Form7.connectionString = myConnString
            Form6.connectionString = myConnString
            
        Catch myerror As MySqlException

            MsgBox("Sie konnten leider nicht angemeldet werden." & vbCrLf & myerror.Message, MsgBoxStyle.Information, "Info")

            txtboxusername.Clear()
            txtboxpassword.Clear()
            txtboxusername.Select()

        End Try

    End Sub

End Class

Im Anwendungsformular dann:

Code:
Imports MySql.Data.MySqlClient
Imports System.Data

Public Class Form7

    Private myConnString As String

    Public WriteOnly Property connectionString() As String
        Set(ByVal value As String)
            myConnString = value
        End Set
    End Property

    Dim durch As Integer

    Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim text As String
        text = "&laden"
        cmderstellen.Text = "Spiel " & text

        Dim conn As New MySqlConnection
        Dim myCommand As New MySqlCommand
        Dim myAdapter As New MySqlDataAdapter
        Dim myData As New DataTable
        Dim SQL As String

        SQL = "SELECT id, beschreibung from savegames"

        conn.ConnectionString = myConnString

        Try
            conn.Open()

            Try
                myCommand.Connection = conn
                myCommand.CommandText = SQL

                myAdapter.SelectCommand = myCommand
                myAdapter.Fill(myData)

                comboboxbeschreibung.DataSource = myData
                comboboxbeschreibung.DisplayMember = "beschreibung"
                comboboxbeschreibung.ValueMember = "id"

            Catch myerror As MySqlException
                MsgBox("There was an error reading from the database: " & myerror.Message)
            End Try
        Catch myerror As MySqlException
            MessageBox.Show("Error connecting to the database: " & myerror.Message)
        Finally
            If conn.State <> ConnectionState.Closed Then conn.Close()
        End Try

    End Sub

    End Class

Geht das mit dem übergeben und speichern des Connection-Strings nicht besser und übersichtlicher? Soweit ich das Galileobuch verstanden habe kann ich doch Programmweite Variablen definieren und die dann in allen Forms aufrufen, oder? Warum ging das bei mir nicht mit dem Connectionstring?

MfG Simauki
 
Hi,
im Fall Nummer 1 würden mir zwei Lösungen einfallen:
1. Nimm statt Dim test() As ... Public test() As ...
Diese Lösung ist aber sehr unsauber und deshalb würde ich dir folgende Lösung empfehlen:
2. Folgender Code ist zwar viel mehr Tipparbeit, ist aber auch sauberer:
Code:
     Public Function gettest(index As Integer) As ...
       Return me.test(index)
     End Function
Da ich keine Erfahrung mit MySQL habe kann ich dir im zweiten Problem leider nicht helfen.

Ciao
DosCoder
 
Hallo, Danke für Deine Antwort. Aber genau das ist das, wo ich noch meine Verständnisschwierigkeiten habe. Wo lege ich die ganzen Arrays fest? Mache ich das in einer leeren klassen-VB (class1.vb) oder in einer Form oder einem Modul (modul1.vb)? Es muss ja eine Datei sein, wo alle Forms drauf Zugriff haben. Und wie binde ich dann die Arrays in der Form ein? Wie rufe ich die auf?

Wenn ich Dich richtig verstehe, muß ich für meine 40 Arrays 40 mal das:

Code:
Public Function gettest(index As Integer) As ...
       Return me.test(index)
     End Function

schreiben. Und womit rufe ich die Arrays dann an anderer Stelle auf?

MfG Simauki
 
Ich verstehe gar nicht, warum du so viele Arrays ÜBERALL brauchst.
Aber nach meinem Wissensstand würde ich in diesem Fall mit Eigenschaften arbeiten, die meine Private Arrays lesen und (falls nötig) schreiben können.

Informiere dich dazu kurz über Eigenschaften.
Bei http://www.galileocomputing.de/openbook/ gibt es da zwei gute Bücher zu.
 
Hallo, ich brauche die Arrays, weil die Koordinaten einer Landkarte repräsentieren. Jese Array ist eine Zeile und jedes Arrayelement die dazugehörige Spalte.

Die Galilebooks haben mir auch nicht wirklich weitergeholfen, weil die das mit den Porpertys und den Arrays nicht gut oder gar nicht beschreiben. Zumindest in dem Buch VB 2008 stehts nicht drin.

MfG Simauki
 
anstelle der Arrays könntest du ev.
C#:
List<Point> l=new List<Point>();
l.Add(new Point(meinX, meinY));
Code:
Dim l As New List(Of Point)()
l.Add(New Point(meinX, meinY))
eine Liste verwenden.

Point ist ein Struct aus dem Namespace System.Drawing und hält als Eigenschaft X und Y.
Wobei dann X deine Zeile wäre und Y deine Spalte.
 
Zuletzt bearbeitet von einem Moderator:
Hallo, danke für die Idee. Das klingt sehr gut. Wie kann ich danach die Elemente wieder auslesen? Normal, wie bei Arrays?

MfG Simauki
 
ja entweder über den Index oder auch mit einer foreach Schleife (wie halt Arrays)

C#:
List<Point> l=new List<Point>();
l.Add(new Point(meinX, meinY));
...
   l[0].X;
   l[0].Y;

   l[1].X;
   l[1].Y;
...
foreach(Point p in l)
{
   p.X;
   p.Y;
}
Code:
Dim l As New List(Of Point)()
l.Add(New Point(meinX, meinY))
...
   l(0).X
   l(0).Y

   l(1).X
   l(1).Y
...
For Each p As Point In l
    p.X
    p.Y
Next

Edit:
Über die Eigenschaft Count der Liste erfährst du die Anzahl Elemente in der Liste ;)
 
Zuletzt bearbeitet von einem Moderator:
Die Galilebooks haben mir auch nicht wirklich weitergeholfen, weil die das mit den Porpertys und den Arrays nicht gut oder gar nicht beschreiben. Zumindest in dem Buch VB 2008 stehts nicht drin.

MfG Simauki

Kurze Antwort:
Das Buch (2008) ist auch nur für einen Kurzeinstieg. Das zu .Net 2005 ist ein Handbuch, entsprehend ausführlicher. Es gibt für .Net 2008 aber ein C# Handbuch, aus dem man die Gundsachen natürlich genauso rauslesen kann:

http://www.galileocomputing.de/openbook/visual_basic/Kapitel_10-005.htm
oder http://www.galileocomputing.de/openbook/visual_csharp/visual_csharp_12_005.htm

http://www.galileocomputing.de/openbook/visual_basic/Kapitel_05-004.htm
oder
http://www.galileocomputing.de/openbook/csharp/kap18.htm

Hilfreich ist auch der Buchscanner zum durchsuchen (der Openbooks):
https://ssl.galileo-press.de/buchscanner/
 
Zuletzt bearbeitet:
Zurück