Gå til innhold

Problem med "Load" kommandoen


Anbefalte innlegg

Bruker Load for å skape nye knapper og labels etc. Problemet blir når jeg vil gjøre dette på objekt som ligger i forskjellige "SSTab" fliker. Skal prøve å forklare litt nærmere:

 

Jeg har et program der jeg har laget den første fliken med innhold manuelt.

Bassert på verdien til en konstant (f.eks. 3) så skal jeg lage x nye fliker på SSTab'en og fylle disse flikene med "kopier" av inneholdet i flik 1 i SSTab'en.

 

Resultatet skal bli at flik x inneholder f.eks. btnExample(x) osv osv.

 

Prøvde bare å bruke "load" "rett fram" men oppdaga da att allt jeg loada la seg i samme "flik" som "faderen" til load-objektet (alltså samme flik som objekt(0) ligger i).

 

Hvordan kan jeg spesifisere hvilken "flik" det nye objektet skal "load'es" inn i? MSDN for Load sier ikke noe om dette?

Lenke til kommentar
Videoannonse
Annonse

Dette er så absolutt ikke umulig, men det må imidlertid gjøres på en litt ulogisk og stygg måte, er jeg redd. Benytt følgende kode for å flytte en kontroll til en annen tab:

 

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Public Sub MoveControlToTab(ByVal SSTab As SSTab, ByVal oControl As Control, ByVal lNewTab As Long, Optional ByVal bAutoActivateTab As Boolean = True)
 
   Dim lTab As Long
   
   ' Lagre den nåværende posisjonen
   lTab = SSTab.Tab
   
   ' Flytt kontrollen til formen
   SetParent oControl.hWnd, SSTab.Parent.hWnd

   ' Aktiviser den nye tabben
   SSTab.Tab = lNewTab
   
   ' Flytt dernest kontrollen til den aktive tabben
   SetParent oControl.hWnd, SSTab.hWnd

   If Not bAutoActivateTab Then
    ' Aktiviser den originale tabben
    SSTab.Tab = lTab
   End If
 
End Sub

 

Eksempelvis kan du benytte den som følger:

 

Private Sub Form_Activate()

   Load optTest(1)
   
   optTest(1).Visible = True
   optTest(1).Top = optTest(0).Top + optTest(0).Height

   ' Flytt denne kontrollen til tab nummer to
   MoveControlToTab SSTab1, optTest(1), 2
   
End Sub

 

Bemerk at koden IKKE vil fungere i verken Form_Initialize eller Form_Load. Du må kjøre koden ifra hendelsen Form_Resize eller en hendelse høyere i aktiveringssekvensen.

Lenke til kommentar

-Er dette en av de tingene som er smidigere og mer logiske i VB.net?

 

Forresten fikk jeg en liten feil i din kode, testa den ved å legge koden inn i et nytt prosjekt som inneholdt 1 stk SSTab1 som hadde 1 tabb. Du hadde glemt å legge til kode for å sette antall tabber før du forsøkte å aktivere den.

 

   'Skape tabben som vi vil flytte kontroller inn i
  SSTab.Tabs = lNewTab + 1
  ' Aktiviser den nye tabben
  SSTab.Tab = lNewTab

 

Ville bare si at din hjelp aadnk, og hjelpen jeg har fått fra alle dere andre, er helt ubeskrivelig! -Kanskje er det noen av dere som synest at jeg spørr for mye, men jeg jobber faktisk veldig mye selv med kodene også, men jeg har ikke tid til å lære alt alene, og det er da det er så fantastisk å ha en gjeng som det vi har her på forumet!

 

Jeg har faktisk et dokument (SDK-liknende) som jeg fører opp det jeg har fått hjelp med i, enn så lenge bare med folks alias, men før jeg ferdigstiller rapporten og trykker opp den, så kommer jeg til å poste her og spørre om lov til å inkludere deres virkelige navn også, så æres den som æres bør som det heter! :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...