Maison >développement back-end >C++ >Comment puis-je activer le redimensionnement des colonnes au moment du design dans les contrôles Windows Forms personnalisés ?

Comment puis-je activer le redimensionnement des colonnes au moment du design dans les contrôles Windows Forms personnalisés ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 18:21:41169parcourir

How Can I Enable Design-Time Column Resizing in Custom Windows Forms Controls?

Activation de la prise en charge de la conception dans les contrôles personnalisés

Lors de la création de contrôles personnalisés, il est souhaitable de conserver les mêmes fonctionnalités que leurs contrôles de base. L'une de ces fonctionnalités est la possibilité de redimensionner les colonnes en faisant glisser les en-têtes au moment de la conception. Cependant, par défaut, les contrôles personnalisés n'héritent pas de ce comportement.

Le concepteur Windows Forms utilise des classes de concepteur dédiées pour des contrôles spécifiques. Le concepteur d’un ListView, par exemple, est la classe interne System.Windows.Forms.Design.ListViewDesigner. Lorsque vous placez un ListView sur un contrôle utilisateur, le ControlDesigner par défaut est utilisé à la place, ce qui ne permet pas de faire glisser les en-têtes de colonnes.

Pour remédier à cela, vous pouvez créer un concepteur personnalisé pour le contrôle utilisateur. En exposant le ListView sous-jacent via une propriété publique et en appliquant l'attribut [DesignerSerializationVisibility], vous pouvez accéder et modifier les propriétés du ListView au moment de la conception. De plus, en appliquant l'attribut [Designer] à la classe de contrôle utilisateur, vous pouvez remplacer le concepteur par défaut par votre concepteur personnalisé.

Considérez l'exemple suivant :

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;   // Note: add reference required: System.Design.dll

namespace WindowsFormsApplication1 {
    [Designer(typeof(MyDesigner))]   // Note: custom designer
    public partial class UserControl1 : UserControl {
        public UserControl1() {
            InitializeComponent();
        }

        // Note: property added
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public ListView Employees { get { return listView1; } }
    }

    // Note: custom designer class added
    class MyDesigner : ControlDesigner {
        public override void Initialize(IComponent comp) {
            base.Initialize(comp);
            var uc = (UserControl1)comp;
            EnableDesignMode(uc.Employees, "Employees");
        }
    }
}

Avec ce concepteur personnalisé , le ListView dans le contrôle utilisateur peut être cliqué et conçu comme un ListView autonome.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn