Announcement

Collapse
No announcement yet.

Funktion gibt Objekt zurück - wie verwenden?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Funktion gibt Objekt zurück - wie verwenden?

    Hallo!

    Ich habe ein kompliziertes Problem: weil ich Buttons anklicken, aber trozdem Labels und eine Progressbar ändern möchte, muss ich threadübergreifend programmieren. Das hab ich auch mithilfe der Funktion geschafft:

    Beispiel für die Progressbar:
    [highlight=vbnet]Private Sub GetProgbarValue()
    If ProgressBar.InvokeRequired Then
    Dim ParArray(0) As String
    ParArray(0) = Text
    Dim myDelegate As New SetCallBack(AddressOf GetProgbarValue)
    Me.Invoke(myDelegate, ParArray)
    Else
    Return ProgressBar.Value
    End If
    End Sub[/highlight]

    Wenn ich in einer neuen Sub dann schreibe:
    [highlight=vbnet]MsgBox(GetProgbarValue())[/highlight]
    funktioniert das auch.

    Wenn ich aber jetzt ein Objekt zurückgeben möchte (damit ich nicht für jeden Button, Label,... eine eigene Funktion brauche), kann ich dann mit
    [highlight=vbnet]MsgBox(GetObjekt(ProgressBar).Value)[/highlight]
    den Wert der Progressbar herausfinden möchte, geht das nicht. Es kommt folgender Fehler:

    Die Objektvariable oder die With-Blockvariable wurde nicht festgelegt.
    Wie kann ich das Problem am besten lösen?

    mfg, davidp
    Zuletzt editiert von davidp; 14.05.2009, 18:33.

  • #2
    Wie kann ich das Problem am besten lösen?
    durch Verwendung eines BackgroundWorker. Dieser übernimmt das threadübergreifende Aufrufen.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Originally posted by gfoidl View Post
      durch Verwendung eines BackgroundWorker. Dieser übernimmt das threadübergreifende Aufrufen.

      mfG Gü
      Ich verwende ja bereits einen BackgroundWorker, aber es scheitert an dem Zugriff auf ein über eine Funktion zurückgegebenes Objekt.

      mfg, davidp

      Comment


      • #4
        erkläre mal ein wenig genauer was du machen willst und wie deine Lösung bis jetzt ausschaut
        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

        Comment


        • #5
          Wenn ich die Fehlermeldung richtig interpretiere, gibt GetObject(ProgressBar) Nothing zurück, und dann kannst Du .Value nicht aufrufen.

          Kann es sein, dass ProgressBar zu dem Zeitpunkt keinen String darstellt, der ein Objekt bezeichnet?

          Grundsätzlich solltest Du, wenn Du mit Funktionen nutzt, die Object zurückgeben, nie direkt auf dem Ergebnis arbeiten. Speichere das Ergebnis in eine Variable, versuche die auf den Zieltyp zu casten, und dann erst rufe die Funktion auf, die Du von diesem Objekt nutzen willst. Die einzige Funktion,die Du auf Object aufrufen solltest, ist GetType. Ausnahmen (wie z.B. COM-Objekte, deren Typ in VB nicht darstellbar sind) gibt es immer.

          Gruß
          Martin Dietz
          Zuletzt editiert von M.Dietz; 15.05.2009, 16:30.

          Comment

          Working...
          X