Grössenänderung bei eigener Form ohne Rahmen



  • Ich habe ein Form bei der ich die Titelleiste selber zeichnen möchte,also habe ich eine Form ohne Rahmen genommen,Paddings so eingestellt das der Inhalt von der gezeichneten Titelleiste den richtigen Abstand hat,im PaintEvent das Zeichnen übernommen und MouseDown,MouseUp, und MouseMove Events gesetzt um das Form noch verschieben zu können.Das klappt alles.Nun möchte ich auch die Größe ändern können,aber wenn ich die Größe ändere wird das Form solange grösser bis es aus dem Bildschirm ragt.

    p.s:
    Ich habe jetzt alle Richtungen implementiert.Der Fehler tritt nicht bei Größenänderungen nach Norden,Westen und Nordwesten auf.

    private void CustomForm_MouseMove(object sender, MouseEventArgs e)
            {
                 Rectangle close_button_area = new Rectangle(Width - 20, 0, 20, 20);
                 bool new_mocb = close_button_area.Contains(e.Location);
                 if (new_mocb != mouser_over_close_button)
                 {
                     mouser_over_close_button = new_mocb;
                     Invalidate(close_button_area);
                 }
    
                 if (this.drag)
                 {
                     Point p1 = new Point(e.X, e.Y);
                     Point p2 = this.PointToScreen(p1);
                     Point p3 = new Point(p2.X - this.start_point.X,
                                          p2.Y - this.start_point.Y);
                     int new_width = Width + (e.X -start_point.X );
                     int new_height = Height + (e.Y - start_point.Y);
    
                     switch (direction)
                     {
                         case expand_direction.none: 
                             Location = p3; 
                             break;
                         case expand_direction.east:                        
                             Width = new_width;
                             Invalidate();                        
                             break;
                     }
                 }
                 else
                 {
                     Rectangle n_rec = new Rectangle(3, 0, Width - 7, 3);
                     Rectangle nw_rec = new Rectangle(0, 0, 3, 3);
                     Rectangle ne_rec = new Rectangle(Width - 4, 0, 3, 3);
                     Rectangle w_rec = new Rectangle(0, 3, 3, Height - 7);
                     Rectangle sw_rec = new Rectangle(0, Height - 4, 3, 3);
                     Rectangle s_rec = new Rectangle(3, Height - 4, Width - 7, 3);
                     Rectangle se_rec = new Rectangle(Width - 4, Height-4, 3, 3);
                     Rectangle e_rec = new Rectangle(Width - 4, 3, 3, Height - 7);
    
                     if (n_rec.Contains(e.Location))
                     {
                         Cursor = Cursors.SizeNS;
                         direction = expand_direction.north;
                     }
                     else if (nw_rec.Contains(e.Location))
                     {
                         Cursor = Cursors.SizeNWSE;
                         direction = expand_direction.northwest;
                     }
                     else if (ne_rec.Contains(e.Location))
                     {
                         Cursor = Cursors.SizeNESW;
                         direction = expand_direction.northeast;
                     }
                     ....
                     else
                     {
                         Cursor = Cursors.Default;
                         direction = expand_direction.none;
                     }
                 }
    
            }
    
         private void CustomForm_MouseUp(object sender, MouseEventArgs e)
            {
                Rectangle close_button_area = new Rectangle(Width - 20, 0, 20, 20);
                if (close_button_area.Contains(e.Location))
                {
                    DialogResult = DialogResult.Cancel;
                    Close();
                }
                drag = false;
            }
    
            private void CustomForm_MouseDown(object sender, MouseEventArgs e)
            {
    
                Rectangle content_rect = new Rectangle(3, 20, Width - 7, Height - 24);
    
                if (!content_rect.Contains(e.Location))
                {
                    start_point = new Point(e.X, e.Y);
                    drag = true;
                }            
            }
    

Anmelden zum Antworten