Minulla on pääformi MDIContainer ja tarvitsisin siihen sellaisen paneelin, mihin voisi laittaa välilehtiä yms. ja sitä pystyis liikuttamaan hiirellä. Muuten se voisi olla normaali formi, mutta sen pitäisi olla sellainen että kun sen siirtää jompaan kumpaan reunaan niin se "loksahtaa" sinne. Ja vaihtoehtoisesti sen voisi siirtää vaikka näytön keskelle jolloin se olisi "irrallinen."
Mikä VB.NET 2005:ssa on nimeltään tuollainen, kun tuntuu että olen kokeillut kaikkea mahdollisia, mutta mikään ei ole oikeen sellainen, tai en ole sitten osannut laittaa niille sopivia ominaisuuksia?
Tässä on pari kuvankaappausta OpenOffice Drawista missä on jotakuinkin sellainen:
Kiitos
ja jatkokysymys: kun luon lapsiformille menustripin niin miksi ne siirtyvät pääformin menuun?
toimisikohan tällainen:
luo MDIContainerin reunoille paneelit (Joissa on visible false kunnes toisin määritetään) ja määrittää että jos Form2:sta painetaan ja hiiri liikkuu x suuntaan niin se dockkaa Form2:sen MDIContainerin toiseen paneeliin hiiren liikkeen x määrittämään suuntaan.
hiiren liikkeen voisi toteuttaa ehkä jotenkin siten että se tallettaa pikselin muistiin samalla kun form2:sta painetaan, ja kun tapahtuu liike hiirellä niin se vertaa tuohon talletettuun pikseliin. Jos suurempi kuin x pikseliä suuntaan a tai b niin Fill panel1 tai panel 2 form2:sella. kun formi on siirtynyt paneelille niin sitten visible true sille paneelille missä se on, ja toinen taasen muuteen visible falseksi.
vähän hankalasti selitetty, mutta jotain tällaista varmaan kokeilisin näin äkkisältään.
voin kokeilla tänään jos saan jotain aikaiseksi.
Jees sain jotain väännettyä. eli tee paneeli tuon pääformisi laitaan.
en tehnyt kahdella paneelilla, tein yhdellä. jos haluat tehdä kahdella, sun pitää vaan sitte vaihtaa panelin sisältöä hiiren mukaan.
tällä koodilla toimii siten, että jos tuota kakkosformia painetaan, ja vedetään x määrä pikseleitä jompaan kumpaan suuntaan niin paneeli hyppää sinne laitaan.
paneelissa oleva formi: (tota paneeliformi_MouseMove() ei tartte tehdä jos ei halua pääformissa seurata pixeleita label1,2 ja 3:sella)
Public Class paneeliformi ' elikä se paneelissa oleva formi Dim sijoitus As Integer ' hiiren positio kun painetaan nappi pohjaan Dim x As Integer ' hiiren positio jatkuvana Public Sub paikoitus() If sijoitus > (x + 100) Then My.Forms.Form1.Panel1.Dock = DockStyle.Left End If If sijoitus < (x - 100) Then My.Forms.Form1.Panel1.Dock = DockStyle.Right End If End Sub Private Sub paneeliformi_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown sijoitus = x End Sub Public Sub paneeliformi_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove My.Forms.Form1.Label1.Text = "X." & e.X & vbCrLf & "Y." & e.Y x = e.X My.Forms.Form1.Label2.Text = sijoitus My.Forms.Form1.Label3.Text = x End Sub Private Sub paneeliformi_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp paikoitus() My.Forms.Form1.Refresh() End Sub End Class
main formi:
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load paneeliformi.TopLevel = False Me.Panel1.Controls.Add(paneeliformi) 'lisätään tuo paneeliformi paneeliin paneeliformi.Show() ' näytetään se End Sub End Class
oletukseksi heitin että paneeli on vasemmalla dockattuna
tota irrallisuutta kehittelen vielä
Jeps, kiitoksia kovasti. Viä tartee vähän kehittää tuota, koska jos mulla on koko formin kokoinen TabControl niin hiirihän ei osu paneeliformin pintaan vaan tabcontrolliin ja tuo ei ymmärrä liikuttaa silloin sitä. Tai vaikka käyttäjä painaa vaikka textboxin kohtaa nappia ja yrittää liikuttaa, niin eipähän liiku. Onko jotain pomminvarmaa keinoa tuohon?
Mutta kiitoksia paljon!
saako tabcontroliin mousemove eventtiä?
sillähän tuo ongelma hoituisi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.