Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo funciona xna updateata en winform?

¿Cómo funciona xna updateata en winform?

1. Utilice el diseñador visual del entorno de desarrollo integrado para diseñar el formulario en lugar de escribir código para generar el formulario.

2. Procesamiento de botones.

1. El principio de agregar control WINFORM en formato XNA es muy simple:

1. Obtener FORM a través del identificador de formulario XNA:

xnafrm = CType (System). .Windows.Forms.Form.FromHandle(Me.Window.FromHandle), System.Windows.Forms.Form)

Sin embargo, muchas funciones no se pueden utilizar después de obtenerlo. Sin embargo, no hay problema en satisfacer nuestras necesidades:

2. Vuelva a especificar el padre del control:

pnl.Parent = xnafrm

pnl es un El padre. El contenedor del control de grupo se puede reasignar como el formulario xnafrm. Por supuesto, después de hacer esto, estará en la misma posición que estaba en su forma original. Tenga en cuenta que el controlador de mensajes sigue siendo el controlador de mensajes del formulario original.

En segundo lugar, manejar los eventos del teclado

Si su código no utiliza la entrada del teclado, puede ignorar completamente este párrafo. Dado que el contenedor principal de nuestro control ha cambiado, el contenedor principal original no nos enviará mensajes, mientras que si el nuevo formulario también fuera un WINFORM recibiríamos mensajes de él, pero desafortunadamente el formulario XNA no nos enviará estos mensajes. . Por supuesto, sería posible llamar a su controlador dentro del controlador de claves de XNA, pero eso parecería causar demasiado cruce de código, causando algunos inconvenientes.

1. Conéctese al procesamiento de mensajes y distinga el foco del control:

Implementa IMessageFilter

Application.AddMessageFilter(Me)

' Filtro de mensajes, solo maneja mensajes de liberación de clave

Función pública PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage(ByRef m As System. Windows .Forms.Message) Como BooleanPreFilterMessage

Seleccione Caso m.Msg

Caso WM_KeyUP 'Si es un mensaje de promoción clave. Utilice cerraduras para manejarlo. Filtrando así información redundante. (Empiece a comer mensajes antes de enviarlos, pero no después de enviarlos). (Consulte la descripción del proceso de envío específico para obtener más detalles).

Devolver IsSendMsg

Caso WM_KEYDOWN 'Si es una pulsación de tecla, cómela.

Devolver Verdadero

Selección final

Devuelve Falso

Función final

'Identifica el texto en Todo cuadro de control para agregar manejo de eventos

Private Sub GetChildCtrl (ParentCtrl como control)

Para cada ctrlC como control en ParentCtrl.p> 'Si es un toolstrip, entonces enumere ToolStripTextBox en sus elementos secundarios y agregue controladores de eventos

Si TypeOf ctrlC es ToolStrip, entonces

Para cada elemento como ToolStripItem en CType( ctrlC, ToolStrip).AddHandler CType(item, ToolStripTextBox).KeyUp, AddressOf txtBox_LostFocus

'Función de procesamiento de claves unificada

AddHandler CType(item, ToolStripTextBox).KeyUp, AddressOf txtBox_KeyUp

End If

Siguiente

Fin si

'Recursivo

Si ctrlC.HasChildren Entonces GetChildCtrl(ctrlC)

Siguiente

Fin Sub

'Ingrese el elemento con foco. ToolStripTextBox

Private Sub txtBox_GotFocus(remitente como objeto, e como System.EventArgs)

FocusTextBox = CType(remitente, ToolStripTextBox)

End Sub

Private Sub txtBox_LostFocus(remitente como objeto, e como System.EventArgs)

'Cuando el foco está en el cuadro de texto, los caracteres de entrada son 0-9 o retroceso, etc.

If (FocusTextBox IsNot Nothing) AndAlso KeysList.Contains(e) Then

'Si hay un punto decimal en el cuadro de texto, salga

If ( e = Input.Keys.Decimal O si no e = Input.Keys.OemPeriod) Y también (FocusTextBox.Text.Contains("."))Entonces

FocusTextBox.Text.Replace(".") , String. Vacío)

End If

'Antes de enviar el mensaje, establezca la marca de envío para que el filtro de mensajes comience a tragar el mensaje,

'Después de que comience el envío , continúe bloqueando el mensaje. Cuando llega el mensaje, ya está en estado desbloqueado.

'De esta forma, se filtrará la información redundante. Es por eso que aquí se usa postmessage en lugar de sendmessage.

'Debido a que sendmessage es sincrónico, debe ejecutarse antes de que se ejecute la siguiente declaración, mientras que postmessage es asíncrono y la siguiente declaración se ejecutará antes de que llegue el mensaje.

IsSendMsg = True

PostMessage(FocusTextBox.Control.Handle, WM_KeyUP, New IntPtr(e), New IntPtr(MapVirtualKey(e, WM_KeyUP)))

IsSendMsg = False

End If

End Sub

El código anterior también explica por qué no se utiliza sendmessage.