eli mulla on yks MDIform1 ja form1. MDI formissa on toolbar ja sen päällä on tabstrip1. Valikosta voin luoda aina uuden form1:sen ja samalla ohjelma on uuden TABin. Nyt pitäs saada niin, että aina kun clikataan yhtä TABia, niin aina tietty form1 tulisi kaikkien päälle/aktiiviseksi jne...
Kun painat tabia niin Seformijokapitäälaittaaaktiiviseksi.SetFocus
Ok. Mutta kaikki formit ovat vain FORM1siä, joten en tiedä mikä niistä kulloin kuuluu olla aktiivinen, jos tajusit... vai tuleeko niihin automaattisesti esim fomr1(1)?
Ota toki muuttujaan muistiin viittaus noihin luomiisi formeihin.
Dim Formit(10) As Form1 Dim MontaksNakyvissa As Integer Set Formit(MontaksNakyvissa) = New Form1 Formit(MontaksNakyvissa).Show MontaksNakyvissa = MontaksNakyvissa + 1 '''' Formit(MitaTabiaKlikattiin).SetFocus
Heittää virheen tästä pätkästä:
Formit(TabStrip1.SelectedItem.Index).SetFocus
Object variable or with block variable not set
Auttaakohan jos muutat ylimmän Dim-lauseen
Dim Formit(10) As Form
ei auta :(
Mulla tuo kyllä toimii. Ei kai sitten TABien indeksi ylitä formien UBoundia.
No mikähän tässä nyt mättää, kun en saa toimimaan
Eli mulla on yks MDI form ja yks form1
Dim Formit(10) As Form1 Dim MontaksNakyvissa As Integer Private Sub Command1_Click() Set Formit(MontaksNakyvissa) = New Form1 Formit(MontaksNakyvissa).Show MontaksNakyvissa = MontaksNakyvissa + 1 TabStrip1.Tabs.Add 1 End Sub Private Sub TabStrip1_Click() Formit(TabStrip1.SelectedItem.Index).SetFocus End Sub
Virheen antaa kun painaa jotain TABia:
Object variable or with block variable not set
Pari muutosta, niin ainakin minulla toimii.
Option Explicit Private Formit() As Form1 Private Montako As Integer Private Sub Command1_Click() Montako = Montako + 1 ReDim Preserve Formit(Montako) Set Formit(Montako) = New Form1 Formit(Montako).Show MDIForm1.TabStrip1.Tabs.Add 1 Set MDIForm1.TabStrip1.SelectedItem = MDIForm1.TabStrip1.Tabs(Montako + 1) End Sub Private Sub MDIForm_Load() 'Talteen myös ensimmäinen ja alkuperäinen Form1:nen ReDim Formit(Montako) 'Montako=0 Set Formit(Montako) = Form1 End Sub Private Sub TabStrip1_Click() Formit(TabStrip1.SelectedItem.Index - 1).SetFocus End Sub
Tuo virheilmoitus kertoo sen, että yrität viitata olemattomaan muuttujaan/arvoon, eli ilmeisesti Formiin jota ei ole tai ei ainakaan ole listattu Formit-taulukossa.
Kiitoksia! Tuo toimii :)
Onkohan mitään mahdollisuutta nollata tuota formien järjestysta? Kun yritän tehdä niin, että voi poistaa TABin ja samalla tietenkin valittuna oleva formi poistuisi, mutta homma tuntuu jotenkin sekoavan aina :/
Tällästä olen yrittäny mutta tämä ei toidellakaan toimi:
MDIForm1.TabStrip1.Tabs.Remove (TabStrip1.SelectedItem.Index) Formit(TabStrip1.SelectedItem.Index - 1).Hide Montako = Montako - 1
Muutenkin koko formien järjestys sekoaa kun yksi poistetaan... Kellään ideaa miten tuon voisi toteuttaa?
Poistaminen kannattaa suorittaa vasta, kun Tab on suljettu. SelectedIndex nimittäin muuttuu kun Tab suljetaan.
Dim mika As Integer mika = TabStrip1.SelectedItem.Index - 1 Formit(mika).Hide MDIForm1.TabStrip1.Tabs.Remove (mika) Montako = Montako - 1
Ok. Näyttäisi muuten toimivan, mutta jos on esim. 2 TABia
|'''1'''| |'''2'''| ja poistaa tuon ekan TABin niin tulee error:
index out of bounds
Sain tuon toimimaan, kun muutin tämän:
MDIForm1.TabStrip1.Tabs.Remove (mika)
näin:
MDIForm1.TabStrip1.Tabs.Remove (TabStrip1.SelectedItem.Index)
Mutta sitten tuli uusi ongelma :D Eli kun poistaa kahdesta tabista sen ekan niin homma sekoaa, niin että kun painaa tabia tulee virhe tästä (muuten homma toimii):
Private Sub TabStrip1_Click() Formit(TabStrip1.SelectedItem.Index - 1).SetFocus End Sub
invalid procedure call or argument
En saa tuota yksinkertaisesti toimimaan :( mutta löysin netistä tälläisen: http://www.vbaccelerator.com/home/VB/Code/
Mahtaakohan kellään olla kokemusta tuosta? Itse olen yrittäny lukea tuon ohjeen läpi, mutta en vain pääse jyvälle miten tuota käytettän :/ Sivuta voi ladata esimerkki ohjelman, jossa tuo näyttää toimivan oikein hyvin. Toivottavasti joku osaa auttaa :)
Jos mää nyt oikein ymmärsin... Noh, tekasen tähän koodin:
valittu = tabstrip1.selecteditem.index mdiform1.tabstrip1.tabs.remove (valittu) For i = valittu to ubound(formit) - 1 formit(i) = formit(i+1) Next formit(ubound(formit)).hide montako = montako - 1
Eli siirrellään formeja ja poistetaan sitten viimeinen
hmm tuosta pätkästä antaa virheen:
For i = valittu to ubound(formit) - 1
Pistin dim i as integer...
Myös virheilmoitus olisi hyvä kirjoittaa, helpottaisi auttamista paljon.
formit(i) = formit(i+1)
Virhe:
Compile error
Function or interface marked as restricted, or the function uses an Automation type not supported in Visual Basic
Heitä Set siihen alkuun:
For i = valittu to ubound(formit) - 1 Set formit(i) = formit(i+1) Next
joo nyt toimii, mutta ei vieläkään toivotulla tavalla :(
Voisit selittää miten se nyt toimii :)
Yritetään :)
Jos luon yhden välilehden ja poistan sen niin kaikki toimii ok.
Ongelmia ilmenee silloin kun minulla on kaksi tai useampi välilehti luotuna. Haluan esim. poistaa kahdesta välilehdestä ensimmäisen, jonka jälkeen kakkos TABin ikkuna poistuu eikä se ikkuna jonka pitäisi poistua. Välilehdet kyllä postuvat oikein. Vielä pitäisi saada vaan poistumaan tuo oikei ikkuna... toivottavasti ymmärsit :)
Voihan ***** kukaan ei osaa auttaa :(
Yritetään nyt vielä eli jos auttaa yhtään niin tarvitsen samailaisen tab syteemin kuin esim Operassa, jossa voin myös poistaa ja lisätä tabeja ja ikkuinoita homman sekoamatta...
Projektini mene yhtään eteenpäin ennen kuin tämä toimii :(
Tälläistä olen yrittänyt:
Lataa
Aihe on jo aika vanha, joten et voi enää vastata siihen.