2014-09-11 4 views
4

J'essayais de redimensionner un contrôle avec la souris en maintenant le bouton gauche + Maj enfoncé, en espérant que la largeur et la hauteur seraient ajustées proportionnellement (comme dans Photoshop). N'a pas fonctionné.Comment redimensionner proportionnellement un contrôle avec la souris dans le concepteur de contrôles de WinForm?

J'ai recherché sur Google comment faire cela, bien sûr que j'aurais une réponse dans une minute. À ma grande surprise, je n'ai rien trouvé. Dois-je comprendre que Visual Studio, même en ce qui concerne la version 2013, manque de cette fonctionnalité de conception très basique ?! Ou est-ce que je continue à le manquer?

Veuillez noter que ce n'est pas pour un contrôle particulier seulement; c'est un outil de conception que je voudrais utiliser sur tout ce qui peut être "dessiné" sur un contrôle de formulaire/utilisateur.

+0

Vous ne savez pas s'il existe, mais vous pouvez simplement définir la taille manuellement dans le code du concepteur ou redimensionner à la taille horizontale/verticale souhaitée, puis utiliser le code du concepteur pour modifier l'autre dimension – Charleh

+3

À ma grande surprise, je ne l'ai jamais manqué. – TaW

+0

@Charleh C'est ce que je finis par faire à chaque fois mais franchement je pourrais utiliser quelque chose d'un peu plus efficace. :/ – Crono

Répondre

1

Vous pouvez toujours étendre le contrôle que vous voulez maintenir le rapport de:

public class Panelx : Panel { 

    private int _width; 
    private int _height; 
    private double _proportion; 
    private bool _changingSize; 

    [DefaultValue(false)] 
    public bool MaintainRatio { get; set; } 

    public Panelx() { 
     MaintainRatio = false; 
     _width = this.Width; 
     _height = this.Height; 
     _proportion = (double)_height/(double)_width; 
     _changingSize = false; 
    } 

    protected override void OnResize(EventArgs eventargs) { 
     if (MaintainRatio == true) { 
      if (_changingSize == false) { 
       _changingSize = true; 
       try { 
        if (this.Width != _width) { 
         this.Height = (int)(this.Width * _proportion); 
         _width = this.Width; 
        }; 
        if (this.Height != _height) { 
         this.Width = (int)(this.Height/_proportion); 
         _height = this.Height; 
        }; 
       } 
       finally { 
        _changingSize = false; 
       } 
      } 
     } 
     base.OnResize(eventargs); 
    } 

} 

tout ce que vous devez ensuite faire est de définir la propriété MaintainRatio « true » pour avoir redimensionne de façon appropriée.

Cette solution peut s'avérer très ardue si vous en avez besoin pour travailler avec de nombreux contrôles différents.

+0

Cela ne ferait que résoudre le problème sur un contrôle spécifique, ce qui n'est pas ce que je veux. J'ai mis à jour la question. – Crono

+0

Oui, ma solution ferait beaucoup de travail pour vous si vous le vouliez sur tous les contrôles. – Ulric

Questions connexes