|
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
|
Übersetzung
Original
|
Exemplarische Vorgehensweise: Implementieren eines Typ-Editors für die Benutzeroberfläche
-
Definieren eines benutzerdefinierten Typs -
Definieren eines Ansichtssteuerelements für den Typ-Editor für die Benutzeroberfläche -
Definieren einer Klasse, die von UITypeEditor abgeleitet ist -
Überschreiben der GetEditStyle-Methode, um dem PropertyGrid mitzuteilen, welchen Editorstil der Editor verwendet -
Überschreiben der EditValue-Methode für die Behandlung der Benutzeroberfläche, die Verarbeitung von Benutzereingaben und die Zuweisung von Werten
So definieren Sie einen benutzerdefinierten Enumerationstyp
So definieren Sie ein Ansichtssteuerelement
-
Definieren Sie im Text der Definition des Windows Forms-Steuerelements das LightShapeSelectionControl-Steuerelement. // This control provides the custom UI for the LightShape property // of the MarqueeBorder. It is used by the LightShapeEditor. public class LightShapeSelectionControl : System.Windows.Forms.UserControl { private MarqueeLightShape lightShapeValue = MarqueeLightShape.Square; private IWindowsFormsEditorService editorService = null; private System.Windows.Forms.Panel squarePanel; private System.Windows.Forms.Panel circlePanel; // Required designer variable. private System.ComponentModel.Container components = null; // This constructor takes a MarqueeLightShape value from the // design-time environment, which will be used to display // the initial state. public LightShapeSelectionControl( MarqueeLightShape lightShape, IWindowsFormsEditorService editorService ) { // This call is required by the designer. InitializeComponent(); // Cache the light shape value provided by the // design-time environment. this.lightShapeValue = lightShape; // Cache the reference to the editor service. this.editorService = editorService; // Handle the Click event for the two panels. this.squarePanel.Click += new EventHandler(squarePanel_Click); this.circlePanel.Click += new EventHandler(circlePanel_Click); } protected override void Dispose( bool disposing ) { if( disposing ) { // Be sure to unhook event handlers // to prevent "lapsed listener" leaks. this.squarePanel.Click -= new EventHandler(squarePanel_Click); this.circlePanel.Click -= new EventHandler(circlePanel_Click); if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } // LightShape is the property for which this control provides // a custom user interface in the Properties window. public MarqueeLightShape LightShape { get { return this.lightShapeValue; } set { if( this.lightShapeValue != value ) { this.lightShapeValue = value; } } } protected override void OnPaint(PaintEventArgs e) { base.OnPaint (e); using( Graphics gSquare = this.squarePanel.CreateGraphics(), gCircle = this.circlePanel.CreateGraphics() ) { // Draw a filled square in the client area of // the squarePanel control. gSquare.FillRectangle( Brushes.Red, 0, 0, this.squarePanel.Width, this.squarePanel.Height ); // If the Square option has been selected, draw a // border inside the squarePanel. if( this.lightShapeValue == MarqueeLightShape.Square ) { gSquare.DrawRectangle( Pens.Black, 0, 0, this.squarePanel.Width-1, this.squarePanel.Height-1); } // Draw a filled circle in the client area of // the circlePanel control. gCircle.Clear( this.circlePanel.BackColor ); gCircle.FillEllipse( Brushes.Blue, 0, 0, this.circlePanel.Width, this.circlePanel.Height ); // If the Circle option has been selected, draw a // border inside the circlePanel. if( this.lightShapeValue == MarqueeLightShape.Circle ) { gCircle.DrawRectangle( Pens.Black, 0, 0, this.circlePanel.Width-1, this.circlePanel.Height-1); } } } private void squarePanel_Click(object sender, EventArgs e) { this.lightShapeValue = MarqueeLightShape.Square; this.Invalidate( false ); this.editorService.CloseDropDown(); } private void circlePanel_Click(object sender, EventArgs e) { this.lightShapeValue = MarqueeLightShape.Circle; this.Invalidate( false ); this.editorService.CloseDropDown(); } #region Component Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.squarePanel = new System.Windows.Forms.Panel(); this.circlePanel = new System.Windows.Forms.Panel(); this.SuspendLayout(); // // squarePanel // this.squarePanel.Location = new System.Drawing.Point(8, 10); this.squarePanel.Name = "squarePanel"; this.squarePanel.Size = new System.Drawing.Size(60, 60); this.squarePanel.TabIndex = 2; // // circlePanel // this.circlePanel.Location = new System.Drawing.Point(80, 10); this.circlePanel.Name = "circlePanel"; this.circlePanel.Size = new System.Drawing.Size(60, 60); this.circlePanel.TabIndex = 3; // // LightShapeSelectionControl // this.Controls.Add(this.squarePanel); this.Controls.Add(this.circlePanel); this.Name = "LightShapeSelectionControl"; this.Size = new System.Drawing.Size(150, 80); this.ResumeLayout(false); } #endregion }
So definieren Sie eine Klasse für den Typ-Editor für die Benutzeroberfläche
-
Aktivieren Sie den Zugriff auf die Entwurfszeitunterstützung für .NET Framework, indem Sie auf die System.Design-Assembly verweisen und den System.Drawing.Design-Namespace sowie den System.Windows.Forms.Design-Namespace importieren. Weitere Informationen finden Sie unter Gewusst wie: Zugriff auf Entwurfszeitunterstützung in Windows Forms. -
Definieren Sie im Text der Definition des Windows Forms-Steuerelements die LightShapeEditor-Klasse. // This class demonstrates the use of a custom UITypeEditor. // It allows the MarqueeBorder control's LightShape property // to be changed at design time using a customized UI element // that is invoked by the Properties window. The UI is provided // by the LightShapeSelectionControl class. internal class LightShapeEditor : UITypeEditor {
So überschreiben Sie die GetEditStyle-Methode
-
Überschreiben Sie im Text der LightShapeEditor-Definition die GetEditStyle-Methode, damit DropDown zurückgegeben wird.
So überschreiben Sie die EditValue-Methode
-
Überschreiben Sie im Text der LightShapeEditor-Definition die EditValue-Methode. public override object EditValue( ITypeDescriptorContext context, IServiceProvider provider, object value) { if (provider != null) { editorService = provider.GetService( typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; } if (editorService != null) { LightShapeSelectionControl selectionControl = new LightShapeSelectionControl( (MarqueeLightShape)value, editorService); editorService.DropDownControl(selectionControl); value = selectionControl.LightShape; } return value; }
So überschreiben Sie die PaintValue-Methode
-
Überschreiben Sie im Text der LightShapeEditor-Definition die PaintValue-Methode. Überschreiben Sie auch die GetPaintValueSupported-Methode, damit true zurückgegeben wird. // This method indicates to the design environment that // the type editor will paint additional content in the // LightShape entry in the PropertyGrid. public override bool GetPaintValueSupported( ITypeDescriptorContext context) { return true; } // This method paints a graphical representation of the // selected value of the LightShpae property. public override void PaintValue(PaintValueEventArgs e) { MarqueeLightShape shape = (MarqueeLightShape)e.Value; using (Pen p = Pens.Black) { if (shape == MarqueeLightShape.Square) { e.Graphics.DrawRectangle(p, e.Bounds); } else { e.Graphics.DrawEllipse(p, e.Bounds); } } }
So fügen Sie den Typ-Editor für die Benutzeroberfläche an eine Eigenschaft an
-
Deklarieren Sie im Text der Definition des Steuerelements eine MarqueeLightShape-Eigenschaft mit dem Namen LightShape. Deklarieren Sie zur Unterstützung der Eigenschaft auch ein Instanzfeld des Typs MarqueeLightShape mit dem Namen lightShapeValue. Wenden Sie das EditorAttribute auf die Eigenschaft an.
private MarqueeLightShape lightShapeValue; [Category("Marquee")] [Browsable(true)] [EditorAttribute(typeof(LightShapeEditor), typeof(System.Drawing.Design.UITypeEditor))] public MarqueeLightShape LightShape { get { return this.lightShapeValue; } set { this.lightShapeValue = value; } }
Hinweis
|
|---|
|
|
-
Schreiben Sie einen Typ-Editor für die Benutzeroberfläche, der anstatt auf einem Ansichtssteuerelement auf einem modalen Dialog basiert. -
Schreiben Sie mithilfe der TypeConverter-Klasse einen Typkonverter für einen benutzerdefinierten Typ. Weitere Informationen finden Sie unter Gewusst wie: Implementieren eines Typkonverters. -
Schreiben Sie einen Designer für das benutzerdefinierte Steuerelement. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Windows Forms-Steuerelements, das Entwurfszeitfeatures nutzt.
Hinweis