Ejemplo de editor de tipos de interfaz de usuario de formularios Windows Forms
El siguiente ejemplo de código contiene dos editores de tipos de interfaz de usuario diferentes para dos propiedades del control FlashTrackBar
descrito en Ejemplo de control de formularios Windows Forms. Para descargar el código fuente, vea el Tutorial de Windows Forms.
FlashTrackBarValueEditor
se aplica a la propiedad Value
y demuestra lo siguiente:
- Cómo
FlashTrackBarValueEditor
extiende la clase System.Drawing.Design.UITypeEditor. - Cómo reemplazar el método EditValue para establecer las propiedades del editor.
- Cómo reemplazar el método GetEditStyle para especificar el estilo del editor.
En el segundo ejemplo, FlashTrackBarDarkenByEditor
, se extiende FlashTrackBarValueEditor
y reemplaza a un método auxiliar para establecer las propiedades. FlashTrackBarDarkenByEditor
se aplica a la propiedad DarkenBy
de FlashTrackBar
Nota Debe compilar estos ejemplos (
FlashTrackBarUITypeEditor
yFlashTrackBarDarkenByEditor
) junto con el controlFlashTrackBar
descrito en Ejemplo de control de formularios Windows Forms. Para obtener instrucciones para generar un ejemplo, vea el ejemplo CustomUITypeEditor en ejemplos de .NET: formularios Windows Forms: crear controles.
Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Design
Imports System.Windows.Forms
Imports System.Diagnostics
Imports System.Windows.Forms.ComponentModel
Imports System.Windows.Forms.Design
Namespace Microsoft.Samples.WindowsForms.VB.FlashTrackBar
Public Class FlashTrackBarValueEditor
Inherits UITypeEditor
Private edSvc As IWindowsFormsEditorService
Overridable Protected Sub SetEditorProps(editingInstance As FlashTrackBar, editor As FlashTrackBar)
editor.ShowValue = true
editor.StartColor = Color.Navy
editor.EndColor = Color.White
editor.ForeColor = Color.White
editor.Min = editingInstance.Min
editor.Max = editingInstance.Max
End Sub
Overrides OverLoads Public Function EditValue(context As ITypeDescriptorContext, provider As IServiceProvider, value As object) As Object
If (Not (context Is Nothing) And Not (context.Instance Is Nothing) And Not (provider Is Nothing)) Then
edSvc = CType(provider.GetService(GetType(IWindowsFormsEditorService)), IWindowsFormsEditorService)
If Not (edSvc Is Nothing) Then
Dim trackBar As FlashTrackBar = New FlashTrackBar()
AddHandler trackBar.ValueChanged, AddressOf Me.ValueChanged
SetEditorProps(CType(context.Instance, FlashTrackBar), TrackBar)
Dim asInt As Boolean = True
If (TypeOf value Is Integer) Then
trackBar.Value = CInt(value)
ElseIf (TypeOf value Is System.Byte) Then
asInt = False
trackBar.Value = CType(value, Byte)
End If
edSvc.DropDownControl(trackBar)
If (asInt) Then
value = trackBar.Value
Else
value = CType(trackBar.Value, Byte)
End If
End If
End If
Return value
End Function
Overrides OverLoads Public Function GetEditStyle(context As ITypeDescriptorContext) As UITypeEditorEditStyle
If (Not (context Is Nothing) And Not (context.Instance Is Nothing)) Then
Return UITypeEditorEditStyle.DropDown
End If
Return MyBase.GetEditStyle(context)
End Function
private Sub ValueChanged(sender As object, e As EventArgs)
If Not (edSvc Is Nothing) Then
edSvc.CloseDropDown()
End If
End Sub
End Class
End Namespace
[C#]
namespace Microsoft.Samples.WindowsForms.Cs.FlashTrackBar {
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.ComponentModel;
using System.Windows.Forms.Design;
public class FlashTrackBarValueEditor : System.Drawing.Design.UITypeEditor {
private IWindowsFormsEditorService edSvc = null;
protected virtual void SetEditorProps(FlashTrackBar editingInstance, FlashTrackBar editor) {
editor.ShowValue = true;
editor.StartColor = Color.Navy;
editor.EndColor = Color.White;
editor.ForeColor = Color.White;
editor.Min = editingInstance.Min;
editor.Max = editingInstance.Max;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) {
if (context != null
&& context.Instance != null
&& provider != null) {
edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (edSvc != null) {
FlashTrackBar trackBar = new FlashTrackBar();
trackBar.ValueChanged += new EventHandler(this.ValueChanged);
SetEditorProps((FlashTrackBar)context.Instance, trackBar);
bool asInt = true;
if (value is int) {
trackBar.Value = (int)value;
}
else if (value is byte) {
asInt = false;
trackBar.Value = (byte)value;
}
edSvc.DropDownControl(trackBar);
if (asInt) {
value = trackBar.Value;
}
else {
value = (byte)trackBar.Value;
}
}
}
return value;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) {
if (context != null && context.Instance != null) {
return UITypeEditorEditStyle.DropDown;
}
return base.GetEditStyle(context);
}
private void ValueChanged(object sender, EventArgs e) {
if (edSvc != null) {
edSvc.CloseDropDown();
}
}
}
}
En el siguiente ejemplo de código se muestra un editor de tipos de interfaz de usuario para la propiedad DarkenBy
del control FlashTrackBar
. Este editor de tipos de interfaz de usuario extiende el FlashTrackBarValueEditor
implementado en el ejemplo anterior.
Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Design
Imports System.Windows.Forms
Imports System.Diagnostics
Namespace Microsoft.Samples.WindowsForms.VB.FlashTrackBar
Public Class FlashTrackBarDarkenByEditor
Inherits FlashTrackBarValueEditor
Overrides Protected Sub SetEditorProps(editingInstance As FlashTrackBar, editor As FlashTrackBar)
MyBase.SetEditorProps(editingInstance, editor)
editor.Min = 0
editor.Max = System.Byte.MaxValue
End Sub
End Class
End Namespace
[C#]
namespace Microsoft.Samples.WindowsForms.Cs.FlashTrackBar {
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.ComponentModel;
using System.Windows.Forms.Design;
public class FlashTrackBarDarkenByEditor : FlashTrackBarValueEditor {
protected override void SetEditorProps(FlashTrackBar editingInstance, FlashTrackBar editor) {
base.SetEditorProps(editingInstance, editor);
editor.Min = 0;
editor.Max = byte.MaxValue;
}
}
}
Vea también
Implementar un editor de tipos de interfaz de usuario | Compatibilidad en tiempo de diseño con formularios Windows Forms