Question

Je suis en train de faire avec le travail scrollbars contrôle du navigateur Web. Cependant, comme je vais utiliser pour afficher un message pour un messagebox personnalisé, je ne veux pas la barre de défilement apparaisse même si son pas nécessaire - comme il semble le faire par défaut. Pour contourner cela, je décidé de désactiver les barres de défilement sur le contrôle et l'utilisation à la place des barres de défilement sur un autre contrôle comme un groupe spécial. De cette façon, ils n'apparaissent lorsque vont le contenu de la page du navigateur est trop grand pour s'adapter.

Cela n'a pas fonctionné trop bien, même si je l'ai lu pas mal de messages, même sur StackOverflow, où cela semble être une solution valable. Par exemple, quand j'ai essayé d'utiliser ici la solution:

problème avec un Scrolling contrôle WebBrowser contenu dans un contrôle Panel

Il semble que si les barres de défilement sont désactivées pour le navigateur Web, il ne laissera pas non plus l'utilisation du panneau des barres de défilement. Cela semblait être le cas lors du test en mode de conception. Pour remédier à cela, j'ai essayé d'ajouter une zone d'image derrière le navigateur web à l'intérieur du panneau; il a travaillé en mode de conception (redimensionnement de la zone d'image et d'un navigateur Web provoquerait le panneau pour permettre à ses barres de défilement), mais ne fonctionne pas lors de l'exécution (j'ai ajouté du code pour avoir la zone d'image modification de la taille du contrôle du navigateur Web - qui lui-même est toujours redimensionnée à la taille du contenu défilantes).

J'ai aussi essayé et permettant la désactivation des programme du navigateur scrollbars Web basé sur si la taille ScrollableRectangle était plus grande que la taille du contrôle. Ce serait théoriquement bien, sauf qu'il semble effacer tout le texte dans le contrôle en tout temps la propriété ScrollbarsEnabled change -. Et est donc changé de nouveau à ne pas avoir des barres de défilement

Je fais cela avec le code suivant, appelé efficacement chaque fois qu'une touche est enfoncée dans le contrôle:

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;

Il est également important de noter que je semble aussi besoin d'une solution pour l'éditeur HTML qui sera utilisé dans l'application, donc idéalement toute solution ne se baserait pas sur un événement de chargement de page, etc ... car ceux-ci ne pas déclencher lorsque le navigateur Web dispose d'un mode de conception activée (ce qui est nécessaire pour que cela fonctionne comme un éditeur HTML). Cependant, dans cette situation particulière, je peux retomber sur l'activation de la barre de défilement par défaut s'il n'y a pas de meilleure solution.

EDIT: Pour être clair, je ne parle pas de barres de défilement dans le contenu HTML - qui est sans problème que le HTML est simplement utilisé pour permettre la mise en forme flexible de texte. Je ne parle que de la barre de défilement du contrôle du navigateur lui-même.

Toute aide très appréciée. Merci!

Était-ce utile?

La solution

J'ai fini par trouver une solution à ce moment il y a quelque temps, mais il a oublié de poster ici. En fait ce que je faisais était d'abord activer les barres de défilement par défaut afin qu'ils fonctionnent, bien que toujours apparaître. Ensuite, j'ai créé un contrôle du panneau et dimensionné sur le dessus de la barre de défilement inactif qui apparaît à droite du contrôle du navigateur Web.

Ensuite, je change les points d'ancrage du panneau de barre de défilement pour que le haut, le bas et les côtés droit se casserait toujours dans la taille de la forme, et donc la taille du contrôle du navigateur que tous les bords de trop sont ancrés.

Alors j'ai ajouté un code qui a vérifié le ScrollRectangle taille et comparée à celle du navigateur, si elle est avéré être plus en hauteur ou en largeur, je puis fait le panneau de couverture non visible, mais par ailleurs laissé en place.

Voici les extraits de code pertinents:

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

Espérons que cela aide quelqu'un d'autre à l'avenir, a pris quelques méthodes différentes avant de trouver celui qui fonctionnait assez bien.

Je l'ai décidé jusqu'à la réponse de Sheng (quand je reçois la réputation assez) que, d'une part, il était la seule personne à répondre, et d'autre part, ses informations m'a aidé quand je contemplais l'utilisation d'une sorte d'invocation à essayer activer les barres de défilement au cours de l'exécution. Bien que je trouve ma solution plus simple et tout aussi efficace.

Autres conseils

C'est trop tard. IDocHostUIHandler.GetHostInfo est appelée lorsque le navigateur Web est créé, et la mise en œuvre du WebBrowser définit DOCHOSTUIFLAG_SCROLL_NO ou le drapeau de DOCHOSTUIFLAG_FLAT_SCROLLBAR en fonction de la valeur de sa propriété ScrollBarsEnabled.

Je vous suggère de définir ScrollBarsEnabled false avant de créer la fenêtre du contrôle WebBrowser.

Si vous ne voulez pas la barre de défilement d'un élément particulier, comme corps, div ou textarea, apparaître, vous pouvez définir leurs styles à déborder = « cachés » ou utiliser les propriétés de défilement spécifiques aux éléments tels que doc. Body.SetAttribute ( "scroll", "non").

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top