2010-02-22 6 views
5

Quelqu'un connaît-il un exemple de code qui traîne quelque part et qui me permettrait de redimensionner une image à l'exécution lorsque le curseur de la souris entraîne le bord inférieur droit du contrôle? Toute aide sera appréciée.Contrôles de redimensionnement Au moment de l'exécution

Merci

+0

VEUILLEZ voir ce poste. Peut-être qu'il peut vous aider .. http://stackoverflow.com/questions/17264225/how-can-user-resize-control-at-runtime-in-winforms – Kix46

+0

Essayez ce lien: http: // stackoverflow .com/questions/17264225/how-can-utilisateur-resize-control-at-runtime-in-winforms – Kix46

Répondre

1

Vous pouvez utiliser Utilisez cette "maison" classe. Pour un fonctionnement correct, vous devez avoir un conteneur et un élément de resizer à l'intérieur, comme une image mince fonctionnant comme une bordure de redimensionnement. controlToResize est le conteneur lui-même. Vous pouvez mettre tout ce que vous voulez dans le contrôle. Exemple:

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

Voici 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

grand petit exemple, j'avais besoin de quelque chose de simple comme ça – Charles380

+0

Que diriez-vous de toutes les directions 8? Ce serait génial! – Bitterblue

1

avec l'utilisation

ControlMoverOrResizer

classe this article vous pouvez faire un contrôle mobile et redimensionnable dans le temps d'exécution juste avec une ligne de code! :) exemple:

ControlMoverOrResizer.Init(button1); 

et maintenant button1 est un contrôle mobile et redimensionnable!

Questions connexes