VisualBasic Steuerelemente in einer Class-Datei ansprechen?

Zhen

Lt. Junior Grade
Dabei seit
Aug. 2009
Beiträge
299
Hallo Leute,
ich habe da ein kleines Problem.

Ich schreibe gerade an einem kleinen Tool und komme jetzt nicht mehr weiter.

Es geht darum, dass ich eine Klasse (z.B. class1.vb) und mein Formular (form1.vb).
In dem Formular sind Steuerelemente (Combobox -> cmbTest) und ich wollte
diese Combobox durch eine Funktion in der class1.vb datei ansprechen.

Jetzt sagt es mir, aber dass "cmbTest" nicht deklariert ist und ich damit innerhalb
der Datei nichts anfangen kann.

Meine Frage nun: Ist es möglich das so einzurichten, dass ich die Steuerelemnte aus form1.vb
in der Datei class1.vb ansprechen kann?

In C++ geht das ja ganz einfach durch den #include name.h befehl, aber in visual basic?

PS: benutze übrigens visual basic 2010.
 
M

MacGyver

Gast
Hallo Leute,
ich habe da ein kleines Problem.

Ich schreibe gerade an einem kleinen Tool und komme jetzt nicht mehr weiter.

Es geht darum, dass ich eine Klasse (z.B. class1.vb) und mein Formular (form1.vb).
In dem Formular sind Steuerelemente (Combobox -> cmbTest) und ich wollte
diese Combobox durch eine Funktion in der class1.vb datei ansprechen.

Jetzt sagt es mir, aber dass "cmbTest" nicht deklariert ist und ich damit innerhalb
der Datei nichts anfangen kann.

Meine Frage nun: Ist es möglich das so einzurichten, dass ich die Steuerelemnte aus form1.vb
in der Datei class1.vb ansprechen kann?

In C++ geht das ja ganz einfach durch den #include name.h befehl, aber in visual basic?

PS: benutze übrigens visual basic 2010.
Wenn du die Klasse instanziierst oder die Funktion der Klasse aufrufst, die die Combobox füllen soll, dann mußt du dieser Funktion eine Referenz auf die Combobox mitgeben.

Deine Klasse class1.vb sieht nichts von der aufrufenden Klasse Form1.vb.

In C++ geht das übrigens auch nur wenn du nicht objektorientiert programmierst.
 
Zuletzt bearbeitet: (Was hinzugefügt)

Zhen

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Aug. 2009
Beiträge
299
und wie gebe ich der klasse eine referenz auf die combobox?
bin erst noch anfänger in vb ^^

Kann es sein, dass es dieser "Friend" befehl ist?

soll ich das dann in etwa so schreiben?

Code:
class meineKlasse
 friend cmbTest

sub etwasSchreiben()
 cmbTest.Text = "Hallo Welt"
end sub
end class
Als Beispiel?
 
Zuletzt bearbeitet:

docjb

Cadet 2nd Year
Dabei seit
Juni 2005
Beiträge
19
Könntest du mal den kompletten Quelltext hochladen? Ich verstehe nicht so ganz was du vorhast.
Am besten über Pastebin.com oder sowas.

MfG
 
M

MacGyver

Gast
und wie gebe ich der klasse eine referenz auf die combobox?
bin erst noch anfänger in vb ^^

Kann es sein, dass es dieser "Friend" befehl ist?

soll ich das dann in etwa so schreiben?

Code:
class meineKlasse
 friend cmbTest

sub etwasSchreiben()
 cmbTest.Text = "Hallo Welt"
end sub
end class
Als Beispiel?
Also, Visual Basic 2010 heißt ja im Prinzip Visual Studio 2010 und VB.NET, nech?

Ich habe ein Beispiel gemacht in dem ich auf die leere Form1 eine einzige Combobox die ComboBox1 heißt erstellt habe. Im Load-Ereignis der Form erstelle ich mir ein Objekt meiner Klasse "MeineKlasse" und übergebe der Funktion darin eine Referenz auf die ComboBox1, welche dann mit 9 Einträgen gefüllt wird.

Der Code zum Beispiel ist:

Code:
Public Class Form1

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

        Dim ArbeiterKlasse As MeineKlasse
        ArbeiterKlasse = New MeineKlasse()

        ArbeiterKlasse.FunktionZurComboboxFüllung(ComboBox1)

    End Sub

End Class

Class MeineKlasse

    Public Sub FunktionZurComboboxFüllung(ByRef cBox As ComboBox)

        For i = 1 To 9
            cBox.Items.Add("Eintrag" + i.ToString())
        Next

    End Sub

End Class
 
Zuletzt bearbeitet: (Korrektur)

Grantig

Captain
Dabei seit
Okt. 2008
Beiträge
3.543
@Zhen
Hast du dir den Code von MacGyver schon angesehen? Imo ist das genau was du willst.

Nichtsdestotrotz sehe ich keinen Sinn darin den Zugriff auf die Combobox in eine eigene Klasse auszulagern.
Wenn du die Eigenschaften der Combobox verändern/erweitern willst, solltest du von ihr ableiten. (Vererbungslehre für absolute Anfänger (VB.NET))

Wenn du trotzdem nicht weiterkommst, dann wäre es vllt. gut, wenn du beschreibst, was du überhaupt vorhast, denn mit deinem geposteten Code kann man nicht wirklich viel anfangen.
 
M

MacGyver

Gast
@Zhen
Hast du dir den Code von MacGyver schon angesehen? Imo ist das genau was du willst.

Nichtsdestotrotz sehe ich keinen Sinn darin den Zugriff auf die Combobox in eine eigene Klasse auszulagern.
Wenn du die Eigenschaften der Combobox verändern/erweitern willst, solltest du von ihr ableiten. (Vererbungslehre für absolute Anfänger (VB.NET))

Wenn du trotzdem nicht weiterkommst, dann wäre es vllt. gut, wenn du beschreibst, was du überhaupt vorhast, denn mit deinem geposteten Code kann man nicht wirklich viel anfangen.
Ich vermute wenn er vom prozeduralen Ansatz von C++ kommt, kann er grad nicht viel mit Klassen, Vererbung und objektorienterter Programmierung anfangen.

Etwas mehr Grundlage würde da sicher nicht schaden.
 

Zhen

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Aug. 2009
Beiträge
299
Ich hab C++ Grundlagenkenntnisse und hab das eBook von Galileo Computing über VB 2008 komplett durch.

Ich hab das nun anders gelöst. Funktioniert auch alles, aber geplant war eigentlich folgendes:

Ich schreibe an einem Tool, einem Geometrischen Rechner. Es gibt eine Liste mit den Geometrischen Figuren und mehrere Comboboxen mit den Seiten (a, b, c, d, winkeln, umfang, etc.). Man wählt eine Figur aus und dann eben die Sachen die man gegeben hat z.B. Seite a.
Das Programm checkt das durch und berechnet dann die restlichen Werte!

Für jede Figur gibt es eine eigene Klasse mit den Variablen und den nötigen Funktionen zur berechnung und Ausgabe.
Die klassen sind natürlich in eigene dateien (wie z.B. CQuadrat.vb) ausgelagert. Innerhalb der Klasse gab es eine funktion die eben hätte prüfen sollen was in der combobox gerade ausgewählt wurde (a, b, umfang, fläche? etc.)

Aber naja. Ist jetzt auch egal. Hab das anders gelöst, scheint mir auch doch sogar der bessere weg gewesen zu sein ^^
 
Top