Newsgroup: it.comp.lang.visual-basic
Titolo: AIUTO! Problemi per creazione controllo ActiveX

Salve a tutti, ho progettato un controllo ActiveX che funge da calendario
perpetuo, e all'interno dell'oggetto UserControl ci sono diversi controlli
tra cui una matrice di controlli Label per visualizzare i giorni.
Il problema che riscontro è il seguente: ho scritto il codice nell'evento
Resize del controllo per ridimensionare tutti i controlli, ma stranamente
due label della matrice non appaiono quando carico il controllo in un form.
Ho notato (cambiando la proprietà Top di queste Label, impostando dei valori
fissi) che queste ultime era come se si nascondessero dietro qualcosa.
Ho fatto tutte le prove possibili ma niente da fare. Qualcuno può aiutarmi?
Ecco il codice che ho usato nell'evento Resize, provatelo riempendo i label
con dei numeri.
Grazie a tutti coloro che mi sapranno dare una mano, ma anche agli altri.
P.S. scusate per la lunghezza del codice.
Enzo
Private Sub UserControl_Resize()
Label3.Top = 0
Label3.Left = 0
Label3.Width = ScaleWidth
Label3.Height = ScaleHeight / 10
Combo1.Top = Label3.Height
Combo1.Left = 0
Combo1.Width = ScaleWidth / 2
Combo2.Top = Label3.Height
Combo2.Left = Combo1.Width
Combo2.Width = ScaleWidth / 2
'Giorni della settimana
Label1(0).Top = Combo1.Height + Label3.Height
Label1(0).Left = 0
Label1(0).Width = ScaleWidth / 7
Label1(0).Height = ScaleHeight / 10
Label1(1).Top = Combo1.Height + Label3.Height
Label1(1).Left = Label1(0).Width
Label1(1).Width = ScaleWidth / 7
Label1(1).Height = ScaleHeight / 10
Label1(2).Top = Combo1.Height + Label3.Height
Label1(2).Left = Label1(0).Width + Label1(1).Width
Label1(2).Width = ScaleWidth / 7
Label1(2).Height = ScaleHeight / 10
Label1(3).Top = Combo1.Height + Label3.Height
Label1(3).Left = Label1(0).Width + Label1(1).Width _
                + Label1(2).Width
Label1(3).Width = ScaleWidth / 7
Label1(3).Height = ScaleHeight / 10
Label1(4).Top = Combo1.Height + Label3.Height
Label1(4).Left = Label1(0).Width + Label1(1).Width _
                + Label1(2).Width + Label1(3).Width
Label1(4).Width = ScaleWidth / 7
Label1(4).Height = ScaleHeight / 10
Label1(5).Top = Combo1.Height + Label3.Height
Label1(5).Left = Label1(0).Width + Label1(1).Width _
                + Label1(2).Width + Label1(3).Width _
                + Label1(4).Width
Label1(5).Width = ScaleWidth / 7
Label1(5).Height = ScaleHeight / 10
Label1(6).Top = Combo1.Height + Label3.Height
Label1(6).Left = Label1(0).Width + Label1(1).Width _
                + Label1(2).Width + Label1(3).Width _
                + Label1(4).Width + Label1(5).Width
Label1(6).Width = ScaleWidth / 7
Label1(6).Height = ScaleHeight / 10
'Giorni del mese
Label2(1).Top = Label1(0).Height + Combo1.Height + Label3.Height
Label2(1).Left = 0
Label2(1).Width = ScaleWidth / 7
Label2(1).Height = ScaleHeight / 10
Label2(2).Top = Label1(0).Height + Combo1.Height + Label3.Height
Label2(2).Left = Label2(1).Width
Label2(2).Width = ScaleWidth / 7
Label2(2).Height = ScaleHeight / 10
Label2(3).Top = Label1(0).Height + Combo1.Height + Label3.Height
Label2(3).Left = Label2(1).Width + Label2(2).Width
Label2(3).Width = ScaleWidth / 7
Label2(3).Height = ScaleHeight / 10
Label2(4).Top = Label1(0).Height + Combo1.Height + Label3.Height
Label2(4).Left = Label2(1).Width + Label2(2).Width _
                + Label2(3).Width
Label2(4).Width = ScaleWidth / 7
Label2(4).Height = ScaleHeight / 10
Label2(5).Top = Label1(0).Height + Combo1.Height + Label3.Height
Label2(5).Left = Label2(1).Width + Label2(2).Width _
                + Label2(3).Width + Label2(4).Width
Label2(5).Width = ScaleWidth / 7
Label2(5).Height = ScaleHeight / 10
Label2(6).Top = Label1(0).Height + Combo1.Height + Label3.Height
Label2(6).Left = Label2(1).Width + Label2(2).Width _
                + Label2(3).Width + Label2(4).Width _
                + Label2(5).Width
Label2(6).Width = ScaleWidth / 7
Label2(6).Height = ScaleHeight / 10
Label2(7).Top = Label1(0).Height + Combo1.Height + Label3.Height
Label2(7).Left = Label2(1).Width + Label2(2).Width _
                + Label2(3).Width + Label2(4).Width _
                + Label2(5).Width + Label2(6).Width
Label2(7).Width = ScaleWidth / 7
Label2(7).Height = ScaleHeight / 10
Label2(8).Top = Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(8).Left = 0
Label2(8).Width = ScaleWidth / 7
Label2(8).Height = ScaleHeight / 10
Label2(9).Top = Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(9).Left = Label2(8).Width
Label2(9).Width = ScaleWidth / 7
Label2(9).Height = ScaleHeight / 10
Label2(10).Top = Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(10).Left = Label2(8).Width + Label2(9).Width
Label2(10).Width = ScaleWidth / 7
Label2(10).Height = ScaleHeight / 10
Label2(11).Top = Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(11).Left = Label2(8).Width + Label2(9).Width _
                    + Label2(10).Width
Label2(11).Width = ScaleWidth / 7
Label2(11).Height = ScaleHeight / 10
Label2(12).Top = Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(12).Left = Label2(8).Width + Label2(9).Width _
                    + Label2(10).Width + Label2(11).Width
Label2(12).Width = ScaleWidth / 7
Label2(12).Height = ScaleHeight / 10
Label2(13).Top = Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(13).Left = Label2(8).Width + Label2(9).Width _
                    + Label2(10).Width + Label2(11).Width _
                    + Label2(12).Width
Label2(13).Width = ScaleWidth / 7
Label2(13).Height = ScaleHeight / 10
Label2(14).Top = Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(14).Left = Label2(8).Width + Label2(9).Width _
                    + Label2(10).Width + Label2(11).Width _
                    + Label2(12).Width + Label2(13).Width
Label2(14).Width = ScaleWidth / 7
Label2(14).Height = ScaleHeight / 10
Label2(15).Top = Label2(8).Height + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(15).Left = 0
Label2(15).Width = ScaleWidth / 7
Label2(15).Height = ScaleHeight / 10
Label2(16).Top = Label2(8).Height + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(16).Left = Label2(15).Width
Label2(16).Width = ScaleWidth / 7
Label2(16).Height = ScaleHeight / 10
Label2(17).Top = Label2(8).Height + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(17).Left = Label2(15).Width + Label2(16).Width
Label2(17).Width = ScaleWidth / 7
Label2(17).Height = ScaleHeight / 10
Label2(18).Top = Label2(8).Height + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(18).Left = Label2(15).Width + Label2(16).Width _
                + Label2(17).Width
Label2(18).Width = ScaleWidth / 7
Label2(18).Height = ScaleHeight / 10
Label2(19).Top = Label2(8).Height + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(19).Left = Label2(15).Width + Label2(16).Width _
                + Label2(17).Width + Label2(18).Width
Label2(19).Width = ScaleWidth / 7
Label2(19).Height = ScaleHeight / 10
Label2(20).Top = Label2(8).Height + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(20).Left = Label2(15).Width + Label2(16).Width _
                + Label2(17).Width + Label2(18).Width _
                + Label2(19).Width
Label2(20).Width = ScaleWidth / 7
Label2(20).Height = ScaleHeight / 10
Label2(21).Top = Label2(8).Height + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(21).Left = Label2(15).Width + Label2(16).Width _
                + Label2(17).Width + Label2(18).Width _
                + Label2(19).Width + Label2(20).Width
Label2(21).Width = ScaleWidth / 7
Label2(21).Height = ScaleHeight / 10
Label2(22).Top = Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(22).Left = 0
Label2(22).Width = ScaleWidth / 7
Label2(22).Height = ScaleHeight / 10
Label2(23).Top = Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(23).Left = Label2(22).Width
Label2(23).Width = ScaleWidth / 7
Label2(23).Height = ScaleHeight / 10
Label2(24).Top = Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(24).Left = Label2(22).Width + Label2(23).Width
Label2(24).Width = ScaleWidth / 7
Label2(24).Height = ScaleHeight / 10
Label2(25).Top = Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(25).Left = Label2(22).Width + Label2(23).Width _
                    + Label2(24).Width
Label2(25).Width = ScaleWidth / 7
Label2(25).Height = ScaleHeight / 10
Label2(26).Top = Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(26).Left = Label2(22).Width + Label2(23).Width _
                    + Label2(24).Width + Label2(25).Width
Label2(26).Width = ScaleWidth / 7
Label2(26).Height = ScaleHeight / 10
Label2(27).Top = Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(27).Left = Label2(22).Width + Label2(23).Width _
                    + Label2(24).Width + Label2(25).Width _
                    + Label2(26).Width
Label2(27).Width = ScaleWidth / 7
Label2(27).Height = ScaleHeight / 10
Label2(28).Top = Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(28).Left = Label2(22).Width + Label2(23).Width _
                    + Label2(24).Width + Label2(25).Width _
                    + Label2(26).Width + Label2(27).Width
Label2(28).Width = ScaleWidth / 7
Label2(28).Height = ScaleHeight / 10
Label2(29).Top = Label2(22).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(29).Left = 0
Label2(29).Width = ScaleWidth / 7
Label2(29).Height = ScaleHeight / 10
Label2(30).Top = Label2(22).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(30).Left = Label2(29).Width
Label2(30).Width = ScaleWidth / 7
Label2(30).Height = ScaleHeight / 10
Label2(31).Top = Label2(22).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(31).Left = Label2(29).Width + Label2(30).Width
Label2(31).Width = ScaleWidth / 7
Label2(31).Height = ScaleHeight / 10
Label2(32).Top = Label2(22).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(32).Left = Label2(29).Width + Label2(30).Width _
                    + Label2(31).Width
Label2(32).Width = ScaleWidth / 7
Label2(32).Height = ScaleHeight / 10
Label2(33).Top = Label2(22).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(33).Left = Label2(29).Width + Label2(30).Width _
                    + Label2(31).Width + Label2(32).Width
Label2(33).Width = ScaleWidth / 7
Label2(33).Height = ScaleHeight / 10
Label2(34).Top = Label2(22).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(34).Left = Label2(29).Width + Label2(30).Width _
                    + Label2(31).Width + Label2(32).Width _
                    + Label2(33).Width
Label2(34).Width = ScaleWidth / 7
Label2(34).Height = ScaleHeight / 10
Label2(35).Top = Label2(22).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(35).Left = Label2(29).Width + Label2(30).Width _
                    + Label2(31).Width + Label2(32).Width _
                    + Label2(33).Width + Label2(34).Width
Label2(35).Width = ScaleWidth / 7
Label2(35).Height = ScaleHeight / 10
Label2(36).Top = Label2(29).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(36).Left = 0
Label2(36).Width = ScaleWidth / 7
Label2(36).Height = ScaleHeight / 10
Label2(37).Top = Label2(29).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(37).Left = Label2(36).Width
Label2(37).Width = ScaleWidth / 7
Label2(37).Height = ScaleHeight / 10
Command1.Top = Label2(36).Height + Label2(29).Height _
                + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Command1.Left = 0
Command1.Width = ScaleWidth
Command1.Height = ScaleHeight / 12
End Sub

 P.S. scusate per la lunghezza del codice.
Penso che potresti avere un miglior controllo della situazione impostando
dei cicli e attribuendo ai controlli le misure relative al controllo
precedente. Ma forse mi spiego meglio con un esempio:
Option Explicit
Private Const iFRM_TABLE1_ROWS  As Integer = 1
Private Const iFRM_TABLE1_COLS  As Integer = 7
Private Const iFRM_TABLE2_ROWS  As Integer = 6
Private Const iFRM_TABLE2_COLS  As Integer = 7
' Come vedi carico a runtime Label1() e Label2().
'
Private Sub Form_Load( _
)
Dim i_Col   As Integer
Dim i_Index As Integer
Dim i_Row   As Integer
  For i_Row = 0 To iFRM_TABLE1_ROWS - 1
    For i_Col = 0 To iFRM_TABLE1_COLS - 1
      ' Ricavo l'indice dal numero di riga e colonna.
      '
      Let i_Index = i_Row * iFRM_TABLE1_COLS + i_Col
      If i_Index Then Load Label1(i_Index)
      Let Label1(i_Index).Visible = True
    Next
  Next
  For i_Row = 0 To iFRM_TABLE2_ROWS - 1
    For i_Col = 0 To iFRM_TABLE2_COLS - 1
      Let i_Index = i_Row * iFRM_TABLE2_COLS + i_Col
      If i_Index Then Load Label2(i_Index)
      Let Label2(i_Index).Visible = True
    Next
  Next
End Sub
Private Sub Form_Resize( _
)
Dim i_Col   As Integer
Dim i_Row   As Integer
  Call Label3.Move(0, 0, ScaleWidth, ScaleHeight / 10)
  ' Impostiamo Combo1 in relazione a Label3...
  '
  With Label3
    Call Combo1.Move(0, .Height, ScaleWidth / 2)
  End With
  ' ... quindi Combo2 in rel. a Combo1.
  '
  With Combo1
    Call Combo2.Move(.Width, .Top, .Width)
  End With
  For i_Row = 0 To iFRM_TABLE1_ROWS - 1
    For i_Col = 0 To iFRM_TABLE1_COLS - 1
      ' La posizione di ciascuna Label1 e' calcolata
      ' in relazione a Combo1 ed alla posizione che ha,
      ' in righe e colonne, nella matrice.
      '
      With Combo1
        Call Label1(i_Row * iFRM_TABLE1_COLS + i_Col).Move( _
            0 _
          + (ScaleWidth / 7) * i_Col _
          , (.Top + .Height) _
          + (ScaleHeight / 10) * i_Row _
          , ScaleWidth / 7 _
          , ScaleHeight / 10)
      End With
    Next
  Next
  For i_Row = 0 To iFRM_TABLE2_ROWS - 1
    For i_Col = 0 To iFRM_TABLE2_COLS - 1
      ' La posizione di ciascuna Label2 e' calcolata
      ' in relazione a Label1(0), piu' tante righe di
      ' di Label1, ed alla posizione che ha,
      ' in righe e colonne, nella matrice.
      '
      With Label1(0)
        Call Label2(i_Row * iFRM_TABLE2_COLS + i_Col).Move( _
            0 _
          + (ScaleWidth / 7) * i_Col _
          , (.Top + .Height * iFRM_TABLE1_ROWS) _
          + (ScaleHeight / 10) * i_Row _
          , ScaleWidth / 7 _
          , ScaleHeight / 10)
      End With
    Next
  Next
  ' E, per finire, calcoliamo la posizione di Command1
  ' rispetto a Label2(0).
  '
  With Label2(0)
    Call Command1.Move( _
        0 _
      , .Top + .Height * iFRM_TABLE2_ROWS _
      , ScaleWidth _
      , ScaleHeight / 12)
  End With
End Sub
--
Ciao.
Maurizio

Grazie, ho imparato veramente qualcosa di nuovo. E pensare che io avevo
scritto un mucchio di righe di codice :-)
Ciao,
Vincenzo

 scritto un mucchio di righe di codice :-)
Ho controllato: le tue Lost Labels non andavano a finire sotto Command1,
come avevo ipotizzato. Prova anche tu a vedere che fine facevano:
Label2(36).ZOrder            ' <---
Label2(36).ForeColor = vbRed ' <---
Label2(36).Top = Label2(29).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(36).Left = 0
Label2(36).Width = ScaleWidth / 7
Label2(36).Height = ScaleHeight / 10
Label2(37).ZOrder             ' <---
Label2(37).ForeColor = vbBlue ' <---
Label2(37).Top = Label2(29).Height + Label2(15).Height + Label2(8).Height _
                + Label2(1).Height + Label1(0).Height _
                + Combo1.Height + Label3.Height
Label2(37).Left = Label2(36).Width
Label2(37).Width = ScaleWidth / 7
Label2(37).Height = ScaleHeight / 10
--
Ciao.
Maurizio