Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Creare un oggetto da codice

    Salve ragazzi, il quesito che vi pongo è il seguente.
    Per determinati motivi di migliore prestazione di un programma in VB mi era venuto in mente una cosa, creare un oggetto da codice, tipo una Label.

    Solo che neanche grazie alla guida MSDN sono venuto a capo del problema.

    Ora vi spiego meglio.

    Per creare un oggetto label da codice innanzitutto inizio così

    Dim lblNuovaLabel as Label

    Solo che la guida dice che non basta, la devo anche settare, di conseguenza:

    Set lblNuovaLabel = lblBase

    Dove lblBase è un oggetto Label già creato in precedenza per poterlo usare come Base per creare nuove label.

    Ora il problema è il seguente, con questo metodo non creo un nuovo oggetto Label ma semplicemente una label lblNuovaLabel riferita a lblBase, cioè, due label siamesi
    Ovvero, qualsiasi cosa cambio su una la cambio automaticamente sull'altra...

    Però la guida dice che mettendo New creo un nuovo oggetto, in questo modo:

    Set lblNuovaLabel = New lblBase


    Solo che mi da il seguente errore: "Tipo definito dall'utente non definito"

    Aggiungendo che ho fatto un numero inimmaginabile di prove cambiando la sintassi in 700 modi diversi non risolto nulla, quindi se esiste un modo preciso ne sarei felicissimo :tongue:

    Grazie in anticipo per l'aiuto

  2. #2
    Prova a fare

    Dim LabelNew as object

    set LabelNew = new Label

    Dove al posto di Label non so di preciso cosa ti vada ma tanto l'IDE quando ti da la tendina a discesa ti aiuta...

    Se funziona digitando poi nella riga sotto LabelNew + il Punto ti dovrebbe aver ereditato tutte le proprietà delle label


    In sostanza credo che il problema sia solo che hai associato un controllo sbagliato al tuo oggetto...poi se dichiarare l'oggetto come associazione tardiva o meno quello conta poco nel tuo caso
    visitate www.pcprimipassi.it, il portale italiano per i neofiti del computer

    "Tanto prima o poi ti buco...." disse il baco alla noce!

  3. #3
    Originariamente inviato da RAVALON
    Prova a fare

    Dim LabelNew as object

    set LabelNew = new Label
    Purtroppo questa cosa non la si può fare in VB6, ma solo in VB.NET.
    Ci si può render conto di questa limitazione immediatamente, digitando in VB6 il codice da te riportato: Set LabelNew = New ...
    Al posto dei puntini esce la lista completa di oggetti instanziabili (tecnologia intellisense) ma tra questi compaiono solamente:
    • l'elenco dei form e delle classi definiti nel progetto
    • classi di librerie caricate nella finestra "Riferimenti"
    • la classe Collection

    In VB6, l'unica maniera di creare instanze di componenti di base (come la Label) è questa:
    codice:
    'nel for esiste già una label chiamata Label1
    'alla quale ho assegnato alla proprietà Index il valore 0
    
    'per creare una nuova instanza di label1:
    Load Label1(1)
    
    'modifico le sue proprietà
    Label1(1).Caption = "ciao"
    Label1(1).Top = 0
    Label1(1).Left = 40
    Label1(1).Visible = True
    
    'distruggo Label1(1)
    Unload Label1(1)
    Chi non cerca trova.

  4. #4
    In questo momento non ho il VB sotto mano, per cui ho scritto quel codice perchè pensavo che fosse come per tutti gli altri oggetti....ma in effetti ammetto di non aver mai provato niente del genere poichè non ne ho mai avuto bisogno.

    Comuqnue bene a sapersi :bubu:
    visitate www.pcprimipassi.it, il portale italiano per i neofiti del computer

    "Tanto prima o poi ti buco...." disse il baco alla noce!

  5. #5
    Originariamente inviato da RAVALON
    In questo momento non ho il VB sotto mano, per cui ho scritto quel codice perchè pensavo che fosse come per tutti gli altri oggetti....ma in effetti ammetto di non aver mai provato niente del genere poichè non ne ho mai avuto bisogno.

    Comuqnue bene a sapersi :bubu:
    comunque il modo c'è ance senza un'oggetto preesistente ricordatemi che domani ve lo posto
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  6. #6
    grazie! :tongue:
    visitate www.pcprimipassi.it, il portale italiano per i neofiti del computer

    "Tanto prima o poi ti buco...." disse il baco alla noce!

  7. #7
    codice:
    Private WithEvents txtobjev As TextBox
    
    
    
    Private Sub Form_Load()
    Dim txtobj As TextBox
     Call Aggiungi_Textbox("txtRunTime", Me)
     
     Set txtobj = Oggetto("txtRunTime", Me)
     txtobj.Left = 100
     txtobj.Visible = True
     
     Set txtobjev = txtobj
    End Sub
    
    Private Sub txtobjev_KeyPress(KeyAscii As Integer)
    Select Case txtobjev.Name
      Case "txtRunTime"
        Label1.Caption = "KeyPress (txtRunTime) " & Chr(KeyAscii)
    End Select
    End Sub
    
    Public Sub Aggiungi_Textbox(sNome As String, NomeForm As Form)
    Dim txtControl1  As TextBox
      
     Set txtControl1 = NomeForm.Controls.Add("VB.TextBox", sNome)
    End Sub
    
    Public Function Oggetto(sNome As String, NomeForm As Form) As Control
    Dim obj As Control
     For Each obj In NomeForm.Controls
      If obj.Name = sNome Then
        Set Oggetto = obj
        Exit For
      End If
     Next
    End Function
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  8. #8
    Utente di HTML.it L'avatar di pan
    Registrato dal
    May 2000
    Messaggi
    141

    questo dovrebbe funzionare

    ho provato ad usare i codici da voi riportati ma non mi funzionano su vb6, se qualcuno ha avuto il mio stesso problema consiglio il codice che segue:




    Private Sub Form_Load()

    Dim i As Integer

    For i% = 1 To 20
    Load txtInput(i%)
    With txtInput(i%)
    .Width = 360: .Height = 240
    .Left = ((i% - 1) Mod 5) * .Width
    .Top = ((i% - 1) \ 5) * .Height
    .Visible = True
    End With
    Next i%


    End Sub

    avendo cura di porre sulla form una textbox chiamata txtInput con la proprietà index=0.

    grazie cmq per gli spunti.

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.