Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    7

    [vb6] Consigli accorciare sintassi

    salve, mi ritrovo con una funzione molto ripetitiva, mi sapreste consigliare un metodo x riassumere un po' il tutto?
    La funzione è questa:

    codice:
    Public Function crea(Tipo, Vtag As String, VHeight, Vleft, Vtop, VWidth As Integer)
    Dim i As Integer
        If Tipo = "uno" Then
            With Image1
                i = .UBound + 1
                Load .Item(i)
                .Item(i).Visible = True
                .Item(i).Top = Vtop
                .Item(i).Width = VWidth
                .Item(i).Left = Vleft
                .Item(i).Height = VHeight
                .Item(i).Tag = Vtag
            End With
    
        If Tipo = "due" Then
            With Image2
                i = .UBound + 1
                Load .Item(i)
                .Item(i).Visible = True
                .Item(i).Top = Vtop
                .Item(i).Width = VWidth
                .Item(i).Left = Vleft
                .Item(i).Height = VHeight
                .Item(i).Tag = Vtag
            End With
    
    '[...]
    
        End If
    End Function

    Essendoci tutto il blocco with ke si ripete + volte con l'unica differenza dell'oggetto a cui si riferisce (ImageBox) ho la netta sensazione k esista un modo x scrivere il blocco un'unica volta, mi potreste aiutare?
    Grazie

  2. #2
    Non ho sottomano VB6, ma qualcosa del genere dovrebbe funzionare:
    codice:
    Public Function crea(Tipo, Vtag As String, VHeight, Vleft, Vtop, VWidth As Integer)
        Dim i As Integer
        Dim img As ImageBox
        Select Case Tipo
            Case "uno"
                Set img=Image1
            Case "due"
                Set img=Image2
            '...
        End Select
        If Not (img Is Nothing) Then
            With img
                i = .UBound + 1
                Load .Item(i)
                .Item(i).Visible = True
                .Item(i).Top = Vtop
                .Item(i).Width = VWidth
                .Item(i).Left = Vleft
                .Item(i).Height = VHeight
                .Item(i).Tag = Vtag
            End With
        End If
    End Function
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' non passi anche l'oggetto tra gli argomenti ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    7
    Originariamente inviato da MItaly
    Non ho sottomano VB6, ma qualcosa del genere dovrebbe funzionare:
    codice:
    Public Function crea(Tipo, Vtag As String, VHeight, Vleft, Vtop, VWidth As Integer)
        Dim i As Integer
        Dim img As ImageBox
        Select Case Tipo
            Case "uno"
                Set img=Image1
            Case "due"
                Set img=Image2
            '...
        End Select
        If Not (img Is Nothing) Then
            With img
                i = .UBound + 1
                Load .Item(i)
                .Item(i).Visible = True
                .Item(i).Top = Vtop
                .Item(i).Width = VWidth
                .Item(i).Left = Vleft
                .Item(i).Height = VHeight
                .Item(i).Tag = Vtag
            End With
        End If
    End Function
    No, il codice mi da un errore, penso sia dovuto al fatto k ogni Image è un array, mentre la variabile img non rappresenta un array ma punta solo a uno di essi. Sapete aiutarmi?
    Ho provato a fare una dichiatazione di Img com array

    Dim Img() as Image

    Ma poi mi da un errore nell'assegnazione "Can't assign to array", ovvero qui:

    Set img=Image1

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa, ma quando hai aperto il thread, nel primo post, hai scritto

    With Image1

    ...

    With Image2

    Adesso e' un array ... ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    7
    Originariamente inviato da oregon
    Scusa, ma quando hai aperto il thread, nel primo post, hai scritto

    With Image1

    ...

    With Image2

    Adesso e' un array ... ?
    Esatto, forse avrei dovuto specificarlo, ma nn pensavo cambiasse qualcosa; cmq Image1 e Image2 ecc... sono array di image ( infatti ho scritto
    codice:
    With Image1
          [...]
          .item(i).Visible = true
          [...]
    End With
    Mettere .item(i) non avrebbe senso se le image non fossero array no? O almeno credo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Passa come argomento l'intera array anziché il "tipo".
    Qualche altra osservazione:
    - la Function pare che non restituisca alcun valore, quindi è più adatta una Sub;
    - specifica il tipo di tutti i parametri ricevuti e mettili in un ordine più logico; suggerirei
    codice:
    Public Sub Crea(Images As Object, sTag As String, lLeft As Long, lTop As Long, lWidth As Long, lHeight As Long)

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    7
    Originariamente inviato da Grumpy
    Passa come argomento l'intera array anziché il "tipo".
    Qualche altra osservazione:
    - la Function pare che non restituisca alcun valore, quindi è più adatta una Sub;
    - specifica il tipo di tutti i parametri ricevuti e mettili in un ordine più logico; suggerirei
    codice:
    Public Sub Crea(Images As Object, sTag As String, lLeft As Long, lTop As Long, lWidth As Long, lHeight As Long)
    Grazie, adesso, funziona. X quanto riguarda gli altri consigli sono ben accetti, ma k differenza c'è tra usare una function e una sub?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da Denbyk
    ma k differenza c'è tra usare una function e una sub?
    Una Function restituisce un valore che può essere assegnato ad una variabile o usato come se fosse una variabile. Una Sub no.
    Qualunque testo o guida di qualunque linguaggio di programmazione spiega ben presto questa differenza.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.