Uso de campos de solo lectura en un navegador web de C#

Actualmente estoy usando un control WebBrowser en una aplicación C# WinForms e intento controlar alguna variabilidad presentada con este control.

Básicamente, mis usuarios inician sesión en una interfaz de usuario separada proporcionada por mi aplicación, que luego muestra el control WebBrowser, navega a una URL de inicio de sesión predeterminada y luego completa automáticamente los campos de nombre de usuario y contraseña en esa página.

Sin embargo, para evitar un comportamiento impredecible en este control WebBrowser, quiero hacer que estos cuadros de texto de nombre de usuario y contraseña sean de solo lectura después de que se completen automáticamente. Esencialmente, quiero que el usuario vea una página del navegador que se ha completado para ellos y que no se puede editar. (Esto es para que mi aplicación pueda manejar cualquier error de autenticación en lugar del navegador).

El código que estoy usando actualmente para completar los campos de texto y hacerlos de solo lectura es el siguiente:

webBrowser1.Document.GetElementById("username").InnerText = username;
webBrowser1.Document.GetElementById("password").InnerText = password;
webBrowser1.Document.GetElementById("username").Enabled = false;
webBrowser1.Document.GetElementById("password").Enabled = false;

Desafortunadamente, cuando trato de hacer que los campos sean de solo lectura, el servidor de autenticación actúa como si el campo de la contraseña no se completara y le pide al usuario que lo complete nuevamente después de hacer clic en el botón "Enviar". ¿Es este el comportamiento esperado y, de ser así, qué otros métodos puedo intentar para evitar que los usuarios cambien las credenciales con las que se completó automáticamente el navegador?

preguntado el 12 de junio de 12 a las 17:06

2 Respuestas

Intenta hacerlos readonly:

webBrowser1.Document.GetElementById("username").SetAttribute("readonly", "readonly");        
webBrowser1.Document.GetElementById("password").SetAttribute("readonly", "readonly");

Respondido el 12 de junio de 12 a las 17:06

¡Gracias, eso funcionó! Parece que deshabilitar un formulario de contraseña lo atenúa, evita la selección de texto y evita que se publique, mientras que establecerlo en "solo lectura" permite la selección de texto pero deshabilita la edición mientras se sigue publicando correctamente. - sichinumi

¿Por qué no crea un panel transparente como se muestra en este artículo que se colocaría encima del control del navegador web:

/// <summary>
    /// A transparent control.
    /// </summary>
    public class TransparentPanel : Panel
    {
        public TransparentPanel()
        {
        }

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams createParams = base.CreateParams;
                createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
                return createParams;
            }
        }

        protected override void OnPaintBackground(PaintEventArgs e)
        {
            // Do not paint background.
        }
    }

Esto evitaría que el usuario modifique los valores.

Puede mostrar/ocultar este panel como desee, e incluso extenderlo para capturar ubicaciones de clics del mouse si lo desea.

Respondido el 12 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.