Typen unverträglich - Was soll ich tun??

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von DK1.

    Typen unverträglich - Was soll ich tun??

    HI mal wieder,

    ich habe folgendes Problem. Ich habe eine Form und ein Modul...

    Im Module steht folgender Public Sub:

    Quellcode

    1. Public Sub ImageLabelBtnPos(SameName As String, BtnImageName As String, FormName As String)
    2. Dim UsedImage As Object
    3. Dim UsedLabel As Object
    4. Set UsedImage = FormName & ".Image" & SameName
    5. Set UsedLabel = FormName & ".Label" & SameName
    6. UsedImage.Picture = LoadPicture(App.Path & "\dats\btn\" & BtnImageName)
    7. With UsedLabel
    8. .Top = UsedImage.Top + ((UsedImage.Height / 2) - (UsedLabel.Height / 2))
    9. .Left = UsedImage.Left + ((UsedImage.Width / 2) - (UsedLabel.Width / 2))
    10. End With
    11. End Sub


    In der Form_Load routine steht folgendes:

    Quellcode

    1. Private Sub Form_Load()
    2. Call ImageLabelBtnPos("BtnNext", "btn_gold2_120_30.gif", Me.Name)
    3. End Sub


    er will aber die Objects nicht erstellen....könnt ihr mir helfen????

    Danke schonmal


    Topic verschoben von Admin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Meinst du wirklich VBScript? Gibt es da neuerdings Formulare?

    Set UsedImage = FormName & ".Image" & SameName

    Also FormName & ".Image" & SameName ist ein String und UsedImage ein Objekt, das passt einfach nicht!
    Tipp: Du musst mit einer ForEach-Schleife alle Objekte der Form durchlaufen und die Namen sowie Typen abfragen und dann deine Set-Anweisung benutzen...
    Beispiel:

    Visual Basic-Quellcode

    1. dim c as Control
    2. for each c in Form1.Controls
    3. if typeof c is Image and c.name="Image" & SameName then Set UsedImage = c
    4. next
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Oder:

    Quellcode

    1. Public Sub ImageLabelBtnPos(SameName As String, BtnImageName As String, pForm As Form)
    2. Dim UsedImage As Object
    3. Dim UsedLabel As Object
    4. Set UsedImage = CallByName(pForm, "Image" & SameName, VbGet)
    5. Set UsedLabel = CallByName(pForm, "Label" & SameName, VbGet)
    6. UsedImage.Picture = LoadPicture(App.Path & "\dats\btn\" & BtnImageName)
    7. With UsedLabel
    8. .Top = UsedImage.Top + ((UsedImage.Height / 2) - (UsedLabel.Height / 2))
    9. .Left = UsedImage.Left + ((UsedImage.Width / 2) - (UsedLabel.Width / 2))
    10. End With
    11. End Sub


    Und dann so aus dem Formular aufrufen:

    Quellcode

    1. Private Sub Form_Load()
    2. Call ImageLabelBtnPos("BtnNext", "btn_gold2_120_30.gif", Me)
    3. End Sub
    Eigentlich soll man so kurz hintereinander keine Beiträge
    schreiben, aber mir ist gerade noch etwas eingefallen:
    Falls deine Anwendung Zeitkritisch sein sollte, kannst
    du auch anstelle der Zeile

    Quellcode

    1. Set UsedImage = CallByName(pForm, "Image" & SameName, VbGet)


    Das hier verwenden:

    Quellcode

    1. Set UsedImage = pForm.Controls("Image" & SameName)


    Das ist nämlich ungefähr doppelt so schnell, wie die
    CallByName Variante.
    recht herzlichen dank - bei meinem rechner wird es zwar eh nicht bemerkbar sein, dass das eine schnelle oder langsamer ist....aber da das programm ja auf jedem rechner installiert werden kann (auf fast jedem ;) ) ist es wohl besser, dass ich den schnelleren syntax nehme....