control personalizado hereda un control de usuario de la clase base, pero no puede entrar en Chino (Fin

Es la primera pregunta que me pasé un montón de tiempo. Buscar un número de sitios. no se encuentran soluciones.
Wu Nai se había obligado a ver el código fuente. También se hace referencia fuente MONO. Se encontró que la diferencia entre ellos es muy grande. Y vistazo al código fuente es muy difícil en VS

Sin función de búsqueda de clase. Sólo un archivo de clase para abrir un tipo de archivo de la mirada para ver qué otras clases sólo pueden paso a paso de este método es usado en el interior

. O porque no podía encontrar una buena manera de hacer eso? Con el tiempo me di por vencido este método. Solía ​​descompilar el software Reflector.exe. Esta búsqueda de software

Encuentra muy conveniente. Al hacer clic para encontrar lo que desea ver. Voy a encontrar una clase de control de usuario, y puede leer un anulaciones que se encuentran

El WndProc
protegida desierta la anulación de la WndProc (ref el mensaje m)
{
SI (m.Msg == 7)
{
this.WmSetFocus (ref m);
}
else
{
base.WndProc (ref m);
}
}
Aquí si nada importante, lo haré punto this.WmSetFocus. Entonces base.WndProc (ref m). Haga clic en el salto a la clase base

El ContainerControl
protected void la anulación del WndProc (REF el mensaje m)
{
IF (m.Msg == 7.)
{
This.WmSetFocus (REF m);
}
la otra cosa
{
base.WndProc (REF m);
}
}
I de nuevo punto this.WmSetFocus, esta función alcanza
WmSetFocus privado void (REF el mensaje m)
{

si (base.HostedInWin32DialogManager!)
{
si (this.ActiveControl! = null)
{
base.WmImeSetFocus ();
si (this.ActiveControl.Visible!)
{
this.OnGotFocus (EventArgs.Empty);
}
This.FocusActiveControlInternal ();
} ......

}
Esta vez para ver el base.WmImeSetFocus (), yo estaba en éxtasis. Secreto debe estar ahí. Después de la de clics

Control.WmImeSetFocus ().

WmImeSetFocus vacíos internos ()
{
si (ImeModeConversion.InputLanguageTable = ImeModeConversion.UnsupportedTable!)
{
this.UpdateImeContextMode ();
}
}
接着再往下,
UpdateImeContextMode vacío interno ()
{
ImeMode [] inputLanguageTable = ImeModeConversion.InputLanguageTable;
if ((! base.DesignMode && (inputLanguageTable! = ImeModeConversion.UnsupportedTable)) &&

this.Focused)
{
ImeMode disable = ImeMode.Disable;
ImeMode cachedImeMode = this.CachedImeMode;
if (this.ImeSupported && this.CanEnableIme)
{
disable = (cachedImeMode == ImeMode.NoControl)? PropagatingImeMode:

cachedImeMode;
}
If ((this.CurrentImeContextMode = desactivar) && (deshabilitar = ImeMode.Inherit)!)
{
This.DisableImeModeChangedCount ++;
ImeMode propagatingImeMode = PropagatingImeMode;
tratar
{
ImeContext.SetImeStatus (deshabilitar, this.Handle);
}
Finalmente
{
this.DisableImeModeChangedCount--;
if ((desactivar == ImeMode.Disable) && (inputLanguageTable ==

ImeModeConversion.ChineseTable))
{
PropagatingImeMode = propagatingImeMode;
}
}
Si (cachedImeMode == ImeMode.NoControl)
{
si (this.CanEnableIme)
{
PropagatingImeMode = this.CurrentImeContextMode;
}
}
Más
{
si (this.CanEnableIme)
{
this.CachedImeMode = this.CurrentImeContextMode;
}
This.VerifyImeModeChanged (deshabilitar, this.CachedImeMode);
}
}
}
}

Aquí están todos los secretos y luego subirá. Estos códigos tienen que dejarme estupefacto. ¿Cómo lo consigo? código de MS no puede cambiarlo. Quiero volver a escribir una clase

Clase como él? Dios? En el interior con tanta clase, MSDN que simplemente no se puede explicar, para mí es demasiado difícil. Entonces querido renunciar!
Aquí tirar por un tiempo, mirado en el que se repite anti-código. Decidieron fundar la lógica del programa en dos propiedades. this.CanEnableIme y

this.ImeSupported. La apertura de la ImeSupported parece no ser.
BOOL ImeSupported privada
{
GET
{
return (this.DefaultImeMode = ImeMode.Disable!);
}
}
Luego apunte CanEnableIme. Sorpresa! ............
protegida virtual BOOL CanEnableIme
{
GET
{
retorno this.ImeSupported;
}
}
Ya que es virtual, el intento de anulación. En mi clase personalizada más el código siguiente

BOOL CanEnableIme la protected override
{
GET
{
retorno a la verdad;
}
}
así de simple. Efectiva? No se. Bueno, ahora corriendo! F5! Programar hasta, y rápidamente tratar de abrir el método de entrada, ver si se puede perder en

Wen. Ah! El mundo es tan hermoso! finalmente lo logré. Guangzhou sustituto [eléctrica 13802269370]   sustituto Beijing consultar eléctrica 13802269370    sustituto [micro 13802269370] +

Supongo que te gusta

Origin www.cnblogs.com/bbc2020/p/12503398.html
Recomendado
Clasificación