2

私は現在、C#WinFormsアプリケーションでWebBrowserコントロールを使用しており、このコントロールで提示されるいくつかの変動を制御しようとしています。

基本的に、ユーザーはアプリケーションが提供する別のUIにログインします。このUIは、WebBrowserコントロールを表示し、所定のログインURLに移動して、そのページのユーザー名とパスワードのフィールドに自動入力します。

ただし、このWebBrowserコントロールでの予期しない動作を防ぐために、これらのユーザー名とパスワードのテキストボックスは、自動入力された後は読み取り専用にします。基本的に、ユーザーが入力済みで編集できないブラウザページをユーザーに表示してもらいたいと思います。(これは、認証エラーをブラウザーではなくアプリケーションで処理できるようにするためです。)

テキストフィールドにデータを入力して読み取り専用にするために現在使用しているコードは次のとおりです。

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

残念ながら、フィールドを読み取り専用にしようとすると、認証サーバーはパスワードフィールドが入力されていないように動作し、[送信]ボタンをクリックした後にユーザーにもう一度入力するように求めます。これは予想される動作ですか?もしそうなら、ユーザーがブラウザーに自動入力された資格情報を変更できないようにするために、他にどのような方法を試すことができますか?

4

2 に答える 2

2

それらを作ってみてくださいreadonly

webBrowser1.Document.GetElementById("username").SetAttribute("readonly", "readonly");        
webBrowser1.Document.GetElementById("password").SetAttribute("readonly", "readonly");
于 2012-06-12T16:40:42.283 に答える
2

この記事に示すように、webbrowser-controlの上に配置される透明なパネルを作成してみませんか。

/// <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.
        }
    }

これにより、ユーザーは値を変更できなくなります。

必要に応じてこのパネルを表示/非表示にしたり、必要に応じてマウスクリック位置をキャプチャするように拡張することもできます。

于 2012-06-12T16:41:05.713 に答える