none
Error en control de focos con controles de usuario y messagebox RRS feed

  • Pregunta

  • He creado un user control con dos campos de tipo textbox, aún no le he metido código interno, solo he arrastrado los dos controles.
    He metido este usercontrol en un formulario de windows, posteriormente en este formulario he metido un textBox, en el validating del textbox he metido un showmessage vacío.
    El problema es que cuando tiene el foco el textbox de la pantalla y pulso sobre el segundo textbox de mi usercontrol depues de salir el mensaje modal el foco lo reciben los dos textbos de mi usercontrol, el cursor está en el segundo, pero si pulso una tecla se escribe en el primero.

    ¿Alguien sabe como se puede solucionar este problema, ya que he comprobado que me pasa con las versiones 2003 y 2008 de Visual studio y me parece que sería un error muy tonto de los frameworks como para que no la hayan solucionado aún?

    viernes, 17 de abril de 2009 9:47

Todas las respuestas

  • la situacion es un poco confusa...
    coloca el codigo para poderlo revisar.


    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    viernes, 17 de abril de 2009 14:00
  • Te lo desgloso porque se puede simplificar hasta casi el modelado de pantallas y la inserción de una sola línea de código.

    1.- Me creo un proyecto de tipo WindowsUserControl (control de ventanas). Le añado dos TextBox  (Si les pongo text por defecto se verá mas claro), compilo y guardo (nada mas). Me genera una dll con un control de pantallas (MyUserControl)
    2.- Me creo otro proyecto de tipo window. En él meto dos controles, MyUserControl y un textBox (o una combo por ejemplo).
    3.- En el evento validating (o validated o cualquiera que se ejecute en la perdida de foco) del campo que NO es MyUserControl meto el código:

    (Si trabajo en C#) MessageBox.Show("");
    (Si trabajo en Visual Basic .net) MsgBox("")

    4.- Ejecuto la pantalla.
    5.- Me posiciono con el cursor (o con un clik de mouse) sobre el control que NO es MyUserControl.
    6.- Pincho con el ratón sobre el textBox de MyUserControl que tiene el orden de tabulación mas alto.
    7.- Se puede ver que se quedan seleccionados los textos de los dos textBox. cuando escribes lo realizas sobre el primero, pero el cursor se va moviendo por el segundo (el que habías pinchado)

    Haz la prueba y lo verás.

    viernes, 17 de abril de 2009 16:42
  • Hola, bueno lo que tienes que hacer es regresar el foco al textbox deseado despues de mostrar la ventana con el metodo MessageBox.Show(...);

    MessageBox.Show(
                    "El mensaje",
                    "El titulo",
                    MessageBoxButton.OK,
                    MessageBoxImage.Information,
                    MessageBoxResult.OK,
                    MessageBoxOptions.None);
    
                //Regresa el foco al textbox deseado
                textBox1.Focus();
    martes, 21 de abril de 2009 4:36
  • Como he comentado antes he simplificado un poco el problema, en mi aplicación utilizo estos Usercontrol para controlar varios tipos de datos (cuentas bancarias, Importes en diferentes divisas,etc.. por lo que en una pntalla puedo tener varios controles de usuario entonces no sé sobre qué control se ha pulsado.

    Lo he intentado sobreescribiendo el evento Wndproc y preprocesmessage de la pantalla para enviar el foco al subcontrol pulsado, pero ne ha dado resultado, parece ser el framework no notifica control la perdida de su foco cuando se muestra el msgbox y al recuperar el foco la pantalla se lo manda al primer campo del usercontrol


    jueves, 23 de abril de 2009 20:15