0

Web ブラウザー コントロールでスクロールバーを動作させようとしています。ただし、カスタムメッセージボックスのメッセージを表示するために使用するので、デフォルトで表示されるように、必要がなくてもスクロールバーを表示したくありません。これを回避するために、コントロールのスクロールバーを無効にし、代わりに Panel などの別のコントロールでスクロールバーを使用することにしました。この方法では、ブラウザ ページのコンテンツが大きすぎて収まらない場合にのみ表示されます。

これはあまりうまくいきませんでしたが、これが有効な解決策であると思われる StackOverflow でさえ、かなりの数の投稿を読みました。一例は、ここでソリューションを使用しようとしたときです。

Panel コントロールに含まれる WebBrowser コントロールのスクロールの問題

Webブラウザでスクロールバーが無効になっている場合、パネルでもスクロールバーを使用できないようです。これは、デザイン モードでテストした場合に発生したようです。これを克服するために、パネル内の Web ブラウザーの後ろに画像ボックスを追加してみました。デザインモードでは機能しましたが (画像ボックスと Web ブラウザーのサイズを変更すると、パネルでスクロールバーが有効になります)、実行時には機能しませんでした (画像ボックスを Web ブラウザーコントロールのサイズに変更するコードを追加しました -これ自体は、スクロール可能なコンテンツのサイズに合わせて常にサイズ変更されます)。

また、ScrollableRectangle のサイズがコントロールのサイズよりも大きいかどうかに基づいて、Web ブラウザーのスクロールバーをプログラムで有効または無効にしようとしました。これは理論的には問題ありませんが、ScrollbarsEnabled プロパティが変更されるたびにコントロール内のすべてのテキストがクリアされ、スクロールバーがない状態に戻ります。

コントロールでキーが押されるたびに効果的に呼び出される次のコードでこれを行っています。

if (Output.Document.Body != null)
{
    if (Output.Document.Body.ScrollRectangle.Size.Height > Output.Size.Height
            || Output.Document.Body.ScrollRectangle.Size.Width > Output.Size.Width)
        Output.ScrollBarsEnabled = true;
    else
        Output.ScrollBarsEnabled = false;
}
else
    Output.ScrollBarsEnabled = false;

また、アプリ内で使用される HTML エディターのソリューションも必要であることに注意することも重要です。そのため、理想的には、どのソリューションもページ読み込みイベントなどに依存しないようにする必要があります。デザイン モードがオンに設定されています (これは、HTML エディターとして機能するために必要です)。ただし、この特定の状況では、より良い解決策がなければ、デフォルトのスクロールバーを有効にすることに頼ることができます.

編集:明確にするために、HTML コンテンツ内のスクロールバーについて話しているわけではありません。HTML は単にテキストの柔軟な書式設定を可能にするために使用されているだけなので、問題はありません。ブラウザ コントロール自体のスクロールバーについてのみ話しています。

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

2

しばらく前にこれに対する解決策を見つけましたが、ここに投稿するのを忘れていました。基本的に私が最初にしたことは、デフォルトでスクロールバーを有効にして、常に表示されるようにすることでした。次に、パネル コントロールを作成し、Web ブラウザー コントロールの右側に表示される非アクティブなスクロールバーの上にサイズを合わせました。

次に、スクロール バー パネルのアンカーを変更して、上部、下部、および右側が常にフォームのサイズに収まるようにしました。したがって、ブラウザ コントロールのサイズもすべての端が固定されるためです。

次に、ScrollRectangleのサイズをチェックしてブラウザーのサイズと比較するコードを追加しました。高さまたは幅が大きいことが判明した場合は、カバー パネルを非表示にし、それ以外の場合はそのままにしました。

関連するコード スニペットは次のとおりです。

            //If still bigger, set scrollbars:

            if ((Output.Document.Body.ScrollRectangle.Size.Height > Output.Size.Height) ||
                Output.Document.Body.ScrollRectangle.Size.Width > Output.Size.Width)
            {
                ScrollPanel.Visible = false;
                ScrollPanel.Enabled = false;
            }

これが将来他の誰かに役立つことを願っています.十分に機能する方法を見つける前に、いくつかの異なる方法を取りました.

私はShengの回答をアップすることにしました(十分な評判を得たとき)。第一に、応答したのは彼だけであり、第二に、スクロールバーを有効にするために何らかの呼び出しを使用することを検討していたときに、彼の情報が役に立ちました。ランタイム中。私のソリューションはよりシンプルで効果的であることがわかりました。

于 2010-02-04T05:07:11.997 に答える
1

それは遅すぎる。IDocHostUIHandler.GetHostInfo は Web ブラウザーの作成時に呼び出され、Web ブラウザーの実装は、その ScrollBarsEnabled プロパティの値に基づいて DOCHOSTUIFLAG_SCROLL_NO または DOCHOSTUIFLAG_FLAT_SCROLLBAR フラグを設定します。

Webbrowser コントロールのウィンドウを作成する前に、ScrollBarsEnabled を false に設定することをお勧めします。

body、div、textarea などの特定の要素のスクロールバーを表示したくない場合は、それらのスタイルを overflow='hidden' に設定するか、doc.Body.SetAttribute などの要素に固有のスクロール プロパティを使用できます。 (「スクロール」、「いいえ」)。

于 2010-01-08T01:04:34.233 に答える