Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Aufrufe von Klassen untereinander

Frage Entwicklung Visual Studio

Mitglied: MarcoBorn

MarcoBorn (Level 1) - Jetzt verbinden

03.06.2014, aktualisiert 04.06.2014, 1072 Aufrufe, 7 Kommentare

Hallo Forum,
in meinem Projekt habe ich folgendes Konstrukt:

Eine Klasse "Import" besitzt eine Funktion "StatusfensterNeu", die ein Formular aus einer Klasse "Statusfenster" anzeigt. Jetzt habe ich eine neue Klasse "Vergleich" angelegt, die ebenfalls das Formular anlegt. Der Code dazu sieht verkürzt wie folgt aus:


Public Class Import
Dim mbo_StatusFenster As StatusFenster
Dim m_Status as String
...

Public Sub WordImport()
mbo_StatusFenster = New StatusFenster
m_status = MboStatusfensterNeu("Alte Daten löschen", "1/15: ", 100)
...
End Sub

Public Function MboStatusfensterNeu(q As String, switch As String, fortschritt As Double) As String
...
If mbo_StatusFenster.Visible = False Then mbo_StatusFenster.Show
...
End Sub

End Class



Jetzt habe ich eine neue Klasse "Vergleich", die ebenfalls dieses Statusfenster anzeigen soll. Mein Code sieht wie folgt aus:

Public Partial Class Vergleich
Dim mbo_StatusFenster As StatusFenster
Dim m_Status as String
Dim mbo_Import As New Import
...

Sub Tabellen_vergleichen
mbo_StatusFenster = New StatusFenster
m_status = mbo_Import.MboStatusfensterNeu("Alte Daten löschen", "1/15: ", 100)
...
End Sub

End Class



Ich bekomme jedoch immer eine Fehlermeldung, dass der Verweis nicht auf eine Objektinstanz gelegt wurde. Die Funktion MboStatusfensterNeu wird jedoch aufgerufen, da ich dort noch eine temporäre MsgBox anzeigen lassen kann. Will ich jedoch das Formular anzeigen, bricht das Makro ab. Irgendwie wird die Klasse StatusFenster nicht korrekt erkannt. Wie muss ich meinen Code umstellen, damit das Ganze funktioniert?

Vielen Dank,
M. Born
Mitglied: MarcoBorn
04.06.2014 um 14:58 Uhr
Gibt es hier keinen, der mir einen Tipp geben kann, wie ich den Code umbauen muss, damit es läuft?
Bitte warten ..
Mitglied: colinardo
LÖSUNG 04.06.2014, aktualisiert um 15:29 Uhr
Moin Marco,
Zitat von MarcoBorn:
Gibt es hier keinen, der mir einen Tipp geben kann, wie ich den Code umbauen muss, damit es läuft?
Gibt es schon, wenn du deinen Beitrag entsprechend überarbeitest das ihn jemand verstehen kann, die Klassen sind nicht alle ersichtlich (z.B. fehlt die Definition der Klasse StatusFenster, etc). Hier fehlt dem helfenden absolut der Zusammenhang und wichtige Bestandteile deiner Klassen und das was du vorhast !

Und bitte benutze Code-Tags zum Posten deiner Codes.

Merci.

Grüße Uwe
Bitte warten ..
Mitglied: MarcoBorn
04.06.2014 um 15:29 Uhr
Hallo Uwe,
das mit den Code-Tags war mir nicht bekannt. Die Einrückungen hatte ich manuell gemacht. Daher baue ich sie jetzt noch mal mit den Tags neu. Erstmal der Code der ersten Klasse:

01.
Public Class Import 
02.
  Dim mbo_StatusFenster As StatusFenster 
03.
  Dim m_Status as String 
04.
  ... 
05.
 
06.
  Public Sub WordImport() 
07.
    mbo_StatusFenster = New StatusFenster 
08.
    m_status = MboStatusfensterNeu("Alte Daten löschen", "1/15: ", 100) 
09.
    ... 
10.
  End Sub 
11.
 
12.
  Public Function MboStatusfensterNeu(q As String, switch As String, fortschritt As Double) As String 
13.
    ... 
14.
    If mbo_StatusFenster.Visible = False Then mbo_StatusFenster.Show 
15.
    ... 
16.
  End Sub 
17.
End Class 
Die Sub WordImport ruft die Funktion MBoStatusfensterNeu auf, die wiederum ein Formular startet, das sich in der Klasse StatusFenster befindet. Die Klasse mit dem Status-Fenster ist ein Standard-Formular.
01.
Public Partial Class StatusFenster 
02.
  Public Sub New() 
03.
    Me.InitializeComponent() 
04.
  End Sub 
05.
  ... 
06.
End Class
Jetzt möchte ich in einer neuen Klasse (Code folgt im Anschluss) ebenfalls die Funktion MBoStatusfensterNeu aus der oben genannten Klasse Import aufrufen und somit das Formular starten.

01.
Public Partial Class Vergleich 
02.
  Dim mbo_StatusFenster As StatusFenster 
03.
  Dim m_Status as String 
04.
  Dim mbo_Import As New Import 
05.
  ... 
06.
 
07.
  Sub Tabellen_vergleichen 
08.
    mbo_StatusFenster = New StatusFenster 
09.
    m_status = mbo_Import.MboStatusfensterNeu("Alte Daten löschen", "1/15: ", 100) 
10.
    ... 
11.
  End Sub 
12.
End Class
Dabe erhalte ich jedoch die Fehlermeldung, dass der Verweis nicht auf eine Objektinstanz gelegt wurde. Irgendwie wird die Klasse StatusFenster nicht korrekt erkannt, obwohl der Code ja identisch zur ersten Klasse ist. Was mache ich falsch?


Vielen Dank,
M. Born
Bitte warten ..
Mitglied: colinardo
04.06.2014 um 15:35 Uhr
setze mal einen Breakpoint und checke an welcher Stelle der Debugger stehen bleibt.
Bitte warten ..
Mitglied: MarcoBorn
04.06.2014 um 15:46 Uhr
Das Problem tritt auf, wenn im StatusFenster die übergebenen Parameter zugewiesen werden sollen. Hier erhalte ich folgende Fehlermeldung:
01.
Der Objektverweis wurde nicht auch eine Objektinstanz festgelegt.  
02.
bei FKGenDNA.Importer.MboStatusfensterNeu(String q, String switch, Double fortschritt).
Der Fehler tritt in der Klasse Import in folgender Zeile auf:
01.
mbo_StatusFenster.label1.Text = "Schritt " & switch & q
Wenn ich in der Zeile davor mir per MsgBox die Werte von switsch und q ausgeben lasse, dann geht das ohne Probleme und sie enthalten auch Strings. Ich übergebe sie ja auch in genau denselben Format wie wenn ich die Funktion aus der Klasse Import heraus aufrufe. Kann es sein, dass der Aufruf des Formulars anders erfolgen muss? Ist ggf. die Initialisierung der Formular-Klasse aus der Klasse Vergleich heraus unterschiedlich?
Bitte warten ..
Mitglied: colinardo
LÖSUNG 04.06.2014, aktualisiert um 16:08 Uhr
Alles klar, du erzeugst das Fenster-Objekt nur in der Prozedur WordImport() die du natürlich vor oder im Aufruf von MboStatusfensterNeu() aufrufen musst damit der Dialog überhaupt erzeugt wird, denn ansonsten ist mbo_StatusFenster leer, und somit trifft die Fehlermeldung den Nagel auf den Kopf !

Alternativ musst du das Fenster schon beim initialisieren der Klasse Import erzeugen damit es in allen Prozeduren in der Klasse zur Verfügung steht.
Bitte warten ..
Mitglied: MarcoBorn
04.06.2014 um 16:08 Uhr
Das war es, wonach ich gesucht habe. Ich habe den Code wie folgt geändert und jetzt läuft es:
01.
Public Partial Class Vergleich  
02.
  Dim mbo_StatusFenster As New StatusFenster 
03.
 ...
Manchmal braucht man einfach nur einen kleinen Hinweis und es geht. Vielen Dank für Deine Hilfe...
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Virtualisierung
gelöst Interne Netzwerke untereinander kommunizieren lassen (9)

Frage von chelewae zum Thema Virtualisierung ...

Microsoft Office
gelöst Einträge untereinander Auflisten (8)

Frage von batchnewbie zum Thema Microsoft Office ...

Exchange Server
gelöst Exchange Einführung - Kalender aller User untereinander freigeben und hinzufügen (10)

Frage von Mosurama zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...