Avatar billede alex_sleiborg Nybegynder
28. november 2005 - 15:03 Der er 6 kommentarer og
2 løsninger

Flytte en Non-Rectangular form

Jeg har lavet en form, hvor jeg har fjernet den øverste bjælke, så nu kan jeg ikke flytte rundt på min form. Jeg har i toppen af formen en label, jeg vil gerne have sådan at når man holder venstre muse tast inde, så flyter formen sig rundt ligesom på normal vis.

Jeg har fundet dette link fra microsoft, men her flytter den lige meget hvor man trykker henne på formen. Og det virker i øvrigt ikke særligt godt.

Hvordan gør jeg lige det?

Jeg skal vel have lavet noget kode, så der sker noget når man holder venstre muse knap inde over label'en
Avatar billede jens87 Nybegynder
29. november 2005 - 12:04 #2
Du kan lave en eventhandler på mousebutton_down der sætter en klassevariabel der siger at museknapper er trykket ned.
På mouse_move eventet kan du så tjekke om denne klassevariabel er sand (altså musen er nede), hvis det er tilfældet, så flyt formen til der hvor musen er (husk at tænke på størrelsen af formen, samt at positition siger noget om øverste venstre hjørne så vidt jeg husker).
En sidste eventhandler på mousebutton_up sætter så klassevariablen til falsk, og når du flytter musen uden at ha knappen nede, flyttes formen ikke.

Håber du forstod det ;-)
Avatar billede jens87 Nybegynder
29. november 2005 - 12:10 #3
De 3 eventhandlers vil så se nogenlunde sådan her ud:

private bool isMouseDown; //variabel til at sige om musen er nede eller ej
private Point mouseOffset; //variabel til at gemme det offset der skal bruges til at tage højde for formens størrelse

private void form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
    int xOffset;
    int yOffset;
    if (e.Button == MouseButtons.Left) {
        xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
        yOffset = -e.Y - SystemInformation.FrameBorderSize.Height;
        mouseOffset = new Point(xOffset, yOffset);
        this.isMouseDown = true;
    }   
}

private void form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
    if (this.isMouseDown) {
        Point mousePos = Control.MousePosition;
        mousePos.Offset(mouseOffset.X, mouseOffset.Y);
        this.Location = mousePos;
    }
}

private void form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {
    if (e.Button == MouseButtons.Left) {
        this.isMouseDown = false;
    }
}
Avatar billede alex_sleiborg Nybegynder
29. november 2005 - 12:19 #4
Den kode du skriver, er jo det samme som der står i det link fra msdn. Det virker ikke specielt godt
Avatar billede jens87 Nybegynder
29. november 2005 - 12:28 #5
Well, det virkede fint ved mig - læste ikke hele linket igennem, så bare det ikke var samme sted som jeg fik mit kode fra. Sorry så da :)
Avatar billede alex_sleiborg Nybegynder
29. november 2005 - 12:32 #6
Min virker nemlig meget mærkeligt. Hvis jeg har en label, og jeg gerne vil have at formen flytter sig når man holder muse tasten nede over den label. Hvordan gør jeg det?

Jeg skal vel have koden her imellem
private void label11_Click(object sender, EventArgs e)
        {


        }
Avatar billede alex_sleiborg Nybegynder
06. december 2005 - 08:40 #7
Er der ingen der har haft problemer med den kode fra microsoft?
Avatar billede alex_sleiborg Nybegynder
21. december 2005 - 10:49 #8
Deler pointene da jeg ikke kan få jens's metode til at virke ordenligt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester