2010-02-22 22 views
5

Qualcuno sa di un codice di esempio che si trova ovunque che mi consenta di ridimensionare una picturebox in fase di esecuzione quando il cursore del mouse sta trascinando il bordo inferiore destro del controllo? Qualsiasi aiuto sarà apprezzato.Ridimensionamento dei controlli in fase di esecuzione

Grazie

+0

Leggere questo post. Forse può aiutarti .. http://stackoverflow.com/questions/17264225/how-can-user-resize-control-at-runtime-in-winforms – Kix46

+0

Prova questo link: http: // stackoverflow .com/questions/17264225/how-can-user-resize-control-at-runtime-in-winforms – Kix46

risposta

1

È possibile utilizzare Utilizzare questo "fatto in casa" di classe. Per un corretto funzionamento, è necessario disporre di un contenitore e di un elemento di ridimensionamento al suo interno, come un'immagine sottile che funziona come un bordo di ridimensionamento. ControlToResize è il contenitore stesso. Puoi mettere tutto ciò che vuoi nel controllo. Esempio:

ControlResizer.Init(myPictureBox, myTableLayoutPanel, ControlResizer.Direction.Vertical, Cursors.SizeNS); 

Qui è la classe.

class ControlResizer 
{ 
    public enum Direction 
    { 
     Horizontal, 
     Vertical 
    } 

    public static void Init(Control resizer, Control controlToResize, Direction direction, Cursor cursor) 
    { 
     bool dragging = false; 
     Point dragStart = Point.Empty; 
     int maxBound; 
     int minBound; 

     resizer.MouseHover += delegate(object sender, EventArgs e) 
     { 
      resizer.Cursor = cursor; 
     }; 

     resizer.MouseDown += delegate(object sender, MouseEventArgs e) 
     { 
      dragging = true; 
      dragStart = new Point(e.X, e.Y); 
      resizer.Capture = true; 
     }; 

     resizer.MouseUp += delegate(object sender, MouseEventArgs e) 
     { 
      dragging = false; 
      resizer.Capture = false; 
     }; 

     resizer.MouseMove += delegate(object sender, MouseEventArgs e) 
     { 
      if (dragging) 
      { 
       if (direction == Direction.Vertical) 
       { 
        minBound = resizer.Height; 
        maxBound = controlToResize.Parent.Height - controlToResize.Top - 20; 
        controlToResize.Height = Math.Min(maxBound , Math.Max(minBound, controlToResize.Height + (e.Y - dragStart.Y))); 
       } 
       if (direction == Direction.Horizontal) 
       { 
        minBound = resizer.Width; 
        maxBound = controlToResize.Parent.Width - controlToResize.Left - 20; 
        controlToResize.Width = Math.Min(maxBound, Math.Max(minBound, controlToResize.Width + (e.X - dragStart.X))); 
       } 
      } 
     }; 
    } 
} 
+0

un piccolo piccolo esempio, avevo bisogno di qualcosa di semplice come questo – Charles380

+0

E di tutte le 8 direzioni? Sarebbe fantastico! – Bitterblue

1

con l'utilizzo

ControlMoverOrResizer

classe this article si può fare comando mobile e ridimensionabile in fase di esecuzione solo con una riga di codice! :) esempio:

ControlMoverOrResizer.Init(button1); 

e ora button1 è un comando mobile e ridimensionabile!

Problemi correlati