miten saa semmosen että mdiformissa on joku formi joka on aina päällimmäisenä? tässä ei sitten käy timeri joka kutsuu koko ajan Zorderia, oon kokeillu jo :D. myöskään muissa formeissa toimiva SetWindowPos api ei toimi mdiformin sisällä.
En tiedä, mutta mihinkä tartteisit? MDI ohjelmissahan on ideana että siinä voi käyttää useaa formia...
niin, mutta jos mulla on esim sizable formi joka on venytetty koko ikkunaan niin muut formit tuppaa jäämään sen alle
Tee niistä muista lapsiformeja jolloin ne ovat väkisin sen päällä.
Meinaat että sulla siis on lapsi ikkuna suurennettuna MDI pääikkunaan? Miksi siellä pitäisi jonkun formin näkyä sen yllä...? Työkaluikkunaako yrität saada näkymään?
jep, työkaluikkunan tai sen tapaisen... meizi, ei toi toimi, koska se sizableformikin on mdilapsukainen
Yleensä "isompiin" ohjelmiin kuten Visual Basic, on käyttöliittymä tehty jollain kehittyneemmällä kielellä. Jos vaikka katsot VB:n toolboxia, huomaat että se on nätisti kiinnitetty MDI sovelluksen reunoihin, mutta se silti sisältää X painikkeen ja otsikkorivin. Visual Basicissa ei oletuksena voi formille tehdä aivan samaa olemusta. Sen sijaan Visual C++:ssa on tehty helpoksi tehdä täsmälleen samankaltainen boxi kuin Visual Basicin työkaluikkunat.
Jos, ja kun haluat MDI sovellukseen työkaluikkunan, (mielestäni) MDI lapsi-ikkuna ei tähän sovellu. MDI lapsi-ikkunaahan käytetään lähinnä mallina ohjelman yleisestä "dokumentista" kuten VB:ssä koodi-ikkunat ja lomakkeen kehitysikkunat.
Työkalulaatikon tahi muun tällaisen saat helposti lisäämällä pääikkunaan (MDI) pictureboxin. Pictureboxiin pystyy vetämään kontrolleja, kun taas muuten ei MDI ikkunaan ainakaan helposti lisätä. Et varmaankaan halua työkaluikkunan näyttävän tavalliselta upotetulta pictureboxilta, joten pistä picturen BorderStyle:ksi none. Editorissa mäyttää hiukan typerältä, mutta kun ajat ohjelman niin se näyttää hienolta "koholla tummasta taustasta" olevalta työkaluriviltä. Jos haluat sen muualle kun yläreunaan (ainakin minulla oletuksena se menee yläreunaan), laita picturen Align ominaisuuteen jokin muu kuin top. That's it =)
En sitten tiedä onko tämä paras tapa, mutta itse koen tämän helpoksi.
~jc
No vaikka jcd3nton nyt vaikutti aika ehdottomalta kokeilisin silti modaalista ikkunaa... eli avaat haluamasi lomakkeen komennolla: Form1.Show vbModal
jcd3nton:
Joo, toi on ihan varteenotettava idea vbssä. oon kokeillu joskus kun tein vb2:lla lukkarieditorin, siinä kun ei voi tehdä kuin yhdenlaisia formeja. Hyvä idea toi on, käytän sitä. Kas kun ei aikaisemmin tullu mieleen.
antti:
mikä on modaalinen ikkuna? voi olla tyhmä kymysys mutta en tiä.
Ei kai modaalinen ole kiinteä MDI ikkunassa? Ei välttämätä saa "sulavasti istumaan" siellä... Toisekseen modaalihan odottaa käskyä ennen kuin muu osa ohjelmasta suoritetaan. Ei semmaoinen käy laatuun,kun on tarkoitus tehdä toolboxi tai muu vastaava.
Lainaus MSDN Librarysta
lainaus:
A modal dialog box must be closed (hidden or unloaded) before you can continue working with the rest of the application. For example, a dialog box is modal if it requires you to click OK or Cancel before you can switch to another form or dialog box.
~jc
Modaalinen ikkuna suorittaa toimintoja normaalisti omalla lomakkeellaan - se ei vain anna siirtyä muihin lomakkeisiin ennen kuin modaalinen lomake on suljettu.
Avainlauseena: "before you can continue working with the rest of the application" eli "ennenkuin voit jatkaa TYÖSKENTELYÄ muualla ohjelmassa" - se ei tarkoita ettei muu ohjelma toimisi.
Jos koodissa on muita "säikeitä" kuten ajastin tms. ne toimivat normaalisti modaalisen ikkunan ollessa avoinna.
Edit: MDIFormin sisällä ei voi näyttää lomaketta modaalisena... siitä tuli herja kun testasin. Jos haluaa avata ikkunan MDI-sovelluksessa modaalisena kyseisen lomakkeen MDIChild ominaisuus tulee olla false.
~A
Puhveli:
Pictureboxin voi lisätä suoraan MDI-lomakkeeseen ja käyttää sitä toolboxina. Lomakkeet ei suostu menemään sen päälle, mutta se telakoi itsensä aina lomakkeen ylälaitaan tai alalaitaan lomakkeen levyseksi.
Antti kirjoitti:
Modaalinen ikkuna suorittaa toimintoja normaalisti omalla lomakkeellaan - se ei vain anna siirtyä muihin lomakkeisiin ennen kuin modaalinen lomake on suljettu.
Avainlauseena: "before you can continue working with the rest of the application" eli "ennenkuin voit jatkaa TYÖSKENTELYÄ muualla ohjelmassa" - se ei tarkoita ettei muu ohjelma toimisi.
Ehkä selitin epäselvästi, mutta tuota juuri tarkoitin. Siis eikös se niin ole että jos on modaali auki ja yrität klikata toisella formilla niin kuuluu bling ja mitään ei tapahdu... Eli se odottaa sulkemista. Tämähän tekee VB tyylisen toolboxin tekemisen vaikeaksi koska se pitää aina avata ja työkalun valitsemisen jälkeen sulkea...
~jc
PS.
lainaus:
~A
Nytkö se tarttuu muihinkin... ;-)
Jep ;D
~A
heh
~GW
</offtopic>
joo kiitos
Edit: ~Ph
Aihe on jo aika vanha, joten et voi enää vastata siihen.