Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: MDI tab

Sivun loppuun

Tehy [02.05.2005 21:26:11]

#

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...

sooda [03.05.2005 09:05:06]

#

Kun painat tabia niin Seformijokapitäälaittaaaktiiviseksi.SetFocus

Tehy [03.05.2005 15:32:52]

#

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)?

Blaze [03.05.2005 15:51:44]

#

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

Tehy [03.05.2005 16:17:26]

#

Heittää virheen tästä pätkästä:
Formit(TabStrip1.SelectedItem.Index).SetFocus

Object variable or with block variable not set

setä [03.05.2005 16:46:47]

#

Auttaakohan jos muutat ylimmän Dim-lauseen

Dim Formit(10) As Form

Tehy [03.05.2005 16:52:45]

#

ei auta :(

setä [03.05.2005 19:34:02]

#

Mulla tuo kyllä toimii. Ei kai sitten TABien indeksi ylitä formien UBoundia.

Tehy [16.05.2005 19:39:16]

#

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

BadSource [17.05.2005 07:44:01]

#

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.

Tehy [17.05.2005 07:57:31]

#

Kiitoksia! Tuo toimii :)

Tehy [17.05.2005 15:26:52]

#

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?

sqwiik [17.05.2005 16:36:13]

#

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

Tehy [17.05.2005 16:45:31]

#

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

Tehy [17.05.2005 18:03:16]

#

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

Tehy [19.05.2005 15:27:11]

#

En saa tuota yksinkertaisesti toimimaan :( mutta löysin netistä tälläisen: http://www.vbaccelerator.com/home/VB/Code/Controls/Tab_Controls/MDI_Tabs/article.asp

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 :)

Spongi [19.05.2005 18:44:17]

#

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

Tehy [19.05.2005 19:51:26]

#

hmm tuosta pätkästä antaa virheen:
For i = valittu to ubound(formit) - 1

Pistin dim i as integer...

tuomas [19.05.2005 20:03:38]

#

Myös virheilmoitus olisi hyvä kirjoittaa, helpottaisi auttamista paljon.

Tehy [19.05.2005 20:39:44]

#

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

Spongi [19.05.2005 22:55:33]

#

Heitä Set siihen alkuun:

For i = valittu to ubound(formit) - 1
Set formit(i) = formit(i+1)
Next

Tehy [20.05.2005 07:38:53]

#

joo nyt toimii, mutta ei vieläkään toivotulla tavalla :(

Spongi [20.05.2005 11:48:04]

#

Voisit selittää miten se nyt toimii :)

Tehy [20.05.2005 16:16:33]

#

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 :)

Tehy [21.05.2005 19:56:25]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta