Problemas con TypeConverter

07/03/2006 - 20:29 por Alvaro | Informe spam
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Hola A Todos;<br>
<br>
Tengo el codigo de abajo y me esta presentando los siguientes problemas
cuando esdito desde la Paleta de Propiedades...&nbsp;&nbsp;&nbsp; <br>
<br>
<ol>
<li>Cuando edito el valor de Presicion o Scale. sale el mensaje que
dice "Valor de propiedad no valido" Detalles: "El tipo de objeto no
puede convertirse en tipo de destino.".</li>
<li>Cuando edito el valor de NumberComposition el mensaje es "Valor
de propiedad no valido " Detalles "No se puede convertir
NumberConverter desde System.String."</li>
</ol>
no he podido descubrir por que ???&nbsp; alguien me prodria ayudar por
favor...<br>
<br>
<br>
El codigo que tengo implementado es:<br>
<br>
namespace MyControls.Windows.Controls<br>
{<br>
<br>
&nbsp;&nbsp;&nbsp; public class MyControl : System.Windows.Forms.UserControl<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// &lt;summary&gt; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// Variable del dise&ntilde;ador requerida.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// &lt;/summary&gt;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private System.ComponentModel.Container components = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; private Number _NumberComposition = new Number (15, 0);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; [Locatizable(true), Browsable(true)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Number NumberComposition <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get{&nbsp; return _NumberComposition ; &nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -NumberComposition = value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public MyControl()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Llamada necesaria para el Dise&ntilde;ador de formularios
Windows.Forms.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;InitializeComponent();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO: agregar cualquier inicializaci&oacute;n despu&eacute;s de llamar
a InitializeComponent<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// &lt;summary&gt; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// Limpiar los recursos que se est&eacute;n utilizando.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// &lt;/summary&gt;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;protected override void Dispose( bool disposing )<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( disposing )<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(components != null)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;components.Dispose();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;base.Dispose( disposing );<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;#region C&oacute;digo generado por el Dise&ntilde;ador de componentes<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// &lt;summary&gt; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// M&eacute;todo necesario para admitir el Dise&ntilde;ador. No se puede
modificar <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// el contenido del m&eacute;todo con el editor de c&oacute;digo.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;/// &lt;/summary&gt;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private void InitializeComponent()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;components = new System.ComponentModel.Container();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;#endregion<br>
&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp; <br>
<br>
&nbsp;&nbsp;&nbsp; /* ****************************************** <br>
&nbsp;&nbsp;&nbsp;&nbsp; ****************************************** <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Convertidor de para la composicion en la Paleta<br>
&nbsp;&nbsp;&nbsp;&nbsp; ****************************************** <br>
&nbsp;&nbsp;&nbsp;&nbsp; ****************************************** */<br>
&nbsp;&nbsp;&nbsp; public class NumberConverter : ExpandableObjectConverter {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override bool CanConvertTo(ITypeDescriptorContext
context, Type destinationType) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bool canConvertTo = false;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Puede convertir a InstanceDescriptor<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (destinationType == typeof(InstanceDescriptor)){<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; canConvertTo = true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return canConvertTo;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; canConvertTo = base.CanConvertTo(context,
destinationType);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }catch(Exception e){<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
OpenSystems.Common.ExceptionHandler.GlobalExceptionProcessing.ShowErrorException(e);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return canConvertTo;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override object ConvertTo(ITypeDescriptorContext
context, CultureInfo culture, object value, Type destinationType) {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; object objReturn;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Convierto a InstanceDescriptor que el dise&ntilde;ador<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // usa para generar el codigo de inicializacion<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (destinationType == typeof(InstanceDescriptor)) {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String[] composition = value.ToString().Split(',');<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Int32 Precision Int32.Parse(composition[0].Trim());<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Int32 Scale&nbsp;&nbsp;&nbsp;&nbsp; Int32.Parse(composition[1].Trim());<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Obtengo el constructor<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ConstructorInfo constructor = <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; typeof(Number).GetConstructor(new Type[] {
typeof(Int32), typeof(Int32) });<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Creo el InstanceDescriptor con<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // el constructor y los valores para<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // los parametros del constructor<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; objReturn = new InstanceDescriptor(constructor, new
Int32[] { Precision, Scale });<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return objReturn;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (destinationType == typeof(string)) {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Hago la conversion a string para<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // visualizar los valores en lugar<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // del nombre de la estructura en<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // la ventana de propiedades<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; objReturn = value.ToString();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return objReturn;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }catch(Exception e){<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
OpenSystems.Common.ExceptionHandler.GlobalExceptionProcessing.ShowErrorException(e);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; objReturn = base.ConvertTo (context, culture, value,
destinationType);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return objReturn;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override bool CanConvertFrom(ITypeDescriptorContext
context,Type sourceType) {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Puedo convertir desde string.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Esto habilita la edicion en la<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // linea de la propiedad en la ventana de<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // propiedades<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bool canConvertFrom = false;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sourceType == typeof(string)){<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; canConvertFrom = true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return canConvertFrom;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; canConvertFrom = base.CanConvertFrom(context,
sourceType);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return canConvertFrom;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }catch(Exception e){<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
OpenSystems.Common.ExceptionHandler.GlobalExceptionProcessing.ShowErrorException(e);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return canConvertFrom;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override object ConvertFrom(ITypeDescriptorContext
context,CultureInfo culture,object value) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; object objReturn = base.ConvertFrom(context, culture,
value);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Convierto desde string. Desde ya que<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // este codigo esta simplificado para el ejemplo<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try{<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (value is string) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; string[] valores = value.ToString().Split(',');<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Int32 Precision = Int32.Parse(valores[0].Trim());<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Int32 Scale = Int32.Parse(valores[1].Trim());<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; objReturn = new Number(Precision,Scale);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }catch(Exception e){<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
OpenSystems.Common.ExceptionHandler.GlobalExceptionProcessing.ShowErrorException(e);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return objReturn;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override bool
GetCreateInstanceSupported(ITypeDescriptorContext context) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override object CreateInstance(ITypeDescriptorContext
context, System.Collections.IDictionary propertyValues) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new Number((int) propertyValues["Precision"], (int)
propertyValues["Scale"]);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; } <br>
<br>
&nbsp;&nbsp;&nbsp; [TypeConverter(typeof(MyControls.Windows.Controls.NumberConverter))]<br>
&nbsp;&nbsp;&nbsp; public struct Number {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private int _precision;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private int _scale;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public int Precision {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; get { return _precision; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; set { _precision = value; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public int Scale {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; get { return _scale; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; set { _scale = value; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public Number(int precision, int scale) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _precision = precision;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _scale = scale;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override string ToString() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return this._precision.ToString()+",
"+this._scale.ToString();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
}<br>
<br>
</body>
</html>

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
07/03/2006 - 22:01 | Informe spam
Prueba cambiar esta linea:

[TypeConverter(typeof(MyControls.Windows.Controls.NumberConverter))]

por:

[TypeConverter("MyControls.Windows.Controls.NumberConverter")]

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#2 Alvaro
07/03/2006 - 22:41 | Informe spam
Gracias Eduardo;

Queda funcionando cuando edito Precision o Scale por separado, Pero
cuando cambio el valor en NumberComposition sale "No se puede convertir
NumberConverter desde System.String."

Eduardo A. Morcillo [MS MVP VB] wrote:

Prueba cambiar esta linea:

[TypeConverter(typeof(MyControls.Windows.Controls.NumberConverter))]

por:

[TypeConverter("MyControls.Windows.Controls.NumberConverter")]



Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
07/03/2006 - 23:04 | Informe spam
Prueba cambiar el ConvertFrom a:

public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value) {

object objReturn = null;

try {

if (value is string) {

string[] valores = value.ToString().Split(',');
Int32 Precision = Int32.Parse(valores[0].Trim());
Int32 Scale = Int32.Parse(valores[1].Trim());

objReturn = new Number(Precision, Scale);

} else

objReturn = base.ConvertFrom(context, culture, value);

} catch (Exception e) {

OpenSystems.Common.ExceptionHandler.GlobalExceptionProcessing.ShowErrorException(e);
}

return objReturn;

}

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#4 Alvaro
08/03/2006 - 16:21 | Informe spam
Todo OK... Muchas gracias Eduardo...
Eduardo A. Morcillo [MS MVP VB] wrote:

Prueba cambiar el ConvertFrom a:

public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value) {

object objReturn = null;

try {

if (value is string) {

string[] valores = value.ToString().Split(',');
Int32 Precision = Int32.Parse(valores[0].Trim());
Int32 Scale = Int32.Parse(valores[1].Trim());

objReturn = new Number(Precision, Scale);

} else

objReturn = base.ConvertFrom(context, culture, value);

} catch (Exception e) {

OpenSystems.Common.ExceptionHandler.GlobalExceptionProcessing.ShowErrorException(e);
}

return objReturn;

}



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida