Domanda

Sto cercando di ottenere le barre di scorrimento di lavoro con il controllo del browser web.Tuttavia, come la userò per visualizzare un messaggio personalizzato messagebox, non si desidera che la barra di scorrimento per apparire, anche se non è necessario, come sembra fare per impostazione predefinita.Per aggirare questo ho deciso di disattivare le barre di scorrimento per il controllo e invece utilizzare le barre di scorrimento su un altro controllo con un Pannello.In questo modo si verrà visualizzato solo quando il contenuto della pagina del browser è troppo grande per adattarsi.

Questo non ha funzionato troppo bene, anche se ho letto qualche post, anche su StackOverflow, dove questa sembra essere una soluzione valida.Un esempio è quando ho provato ad utilizzare la soluzione qui:

Problema di scorrimento con un controllo WebBrowser contenuto in un Pannello di controllo

Sembra come se le Barre di scorrimento sono disabilitati per il browser web, non lasciare che il pannello di utilizzare le barre di scorrimento sia.Questo sembra essere il caso quando il test in modalità progettazione.Per ovviare a questo ho cercato di aggiungere una casella di immagine dietro il browser web all'interno del pannello;ha funzionato in modalità progettazione (a ridimensionare la casella di immagine e il browser web potrebbe causare il pannello per attivare le barre di scorrimento), ma non ha funzionato durante l'esecuzione (ho aggiunto il codice per avere la casella di immagine modificare la dimensione del controllo web browser - che di per sé è sempre ridimensionata per adattarsi alle dimensioni di scorrimento contenuto).

Ho provato anche a livello di programmazione, attivazione e disattivazione del browser, le barre di scorrimento se il ScrollableRectangle dimensione è più grande della dimensione del controllo.Questo in teoria andrebbe bene, se non sembra per cancellare tutto il testo all'interno del controllo in qualsiasi momento il ScrollbarsEnabled proprietà viene modificata, e pertanto viene modificata non avendo le barre di scorrimento.

Io lo sto facendo con il seguente codice, chiamato in modo efficace ogni volta che viene premuto un tasto del controllo:

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;

E ' anche importante notare che anche io ho bisogno di una soluzione per l'editor HTML che verrà utilizzato all'interno della app, quindi, idealmente, qualsiasi soluzione non si basano su una pagina evento di carico, ecc...come questi non sembrano trigger quando il browser è in modalità di progettazione impostato su on (che è necessario per farlo funzionare come un editor HTML).Tuttavia, in questa particolare situazione non può ricadere sull'attivazione di default le barre di scorrimento se non esiste una soluzione migliore.

EDIT: Per essere chiaro, io non sto parlando di eventuali barre di scorrimento all'interno del contenuto HTML - che non è di alcuna preoccupazione, in quanto il codice HTML è semplicemente utilizzato per consentire flessibile di formattazione del testo.Sto parlando solo la barra di scorrimento del browser il controllo di sé stessa.

Qualsiasi aiuto molto apprezzato.Grazie!

È stato utile?

Soluzione

Ho finito per trovare una soluzione a questo qualche tempo fa, ma ho dimenticato di postare qui.Fondamentalmente quello che ho fatto è stata la prima abilitare la barra di scorrimento per impostazione predefinita in modo che funzionerà, anche se appaiono sempre.Poi ho creato un pannello di controllo e di dimensioni sopra la parte superiore del inattivo barra di scorrimento che appare sulla destra del controllo del browser web.

Poi ho cambiato le ancore della barra di scorrimento del pannello in modo che la parte superiore, inferiore e lati destro sarebbe sempre si inseriscono in una dimensione del modulo, e quindi la dimensione del controllo del browser come tutti i bordi di troppo sono ancorati.

Poi ho aggiunto un po ' di codice per controllare lo ScrollRectangle dimensioni e confrontato con quello del browser, se si è rivelato essere il più grande in altezza o larghezza, poi ho fatto il pannello di copertura non visibile, ma per il resto lasciato al suo posto.

Ecco le snippet di codice:

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

Spero che questo aiuta qualcun altro in futuro, si prese un paio di metodi diversi prima di trovare quello che ha funzionato abbastanza bene.

Ho deciso di fino Sheng risposta (quando ho abbastanza reputazione), come, in primo luogo è stato l'unica persona per la risposta, e in secondo luogo, la sua informazione mi ha aiutato quando stavo contemplando l'uso di un qualche tipo di invocazione di provare e attivare le barre di scorrimento durante il runtime.Anche se ho trovato la mia soluzione più semplice e altrettanto efficace.

Altri suggerimenti

Che troppo tardi.IDocHostUIHandler.GetHostInfo viene chiamato quando il browser è stato creato, e il WebBrowser attuazione dell'imposta DOCHOSTUIFLAG_SCROLL_NO o il DOCHOSTUIFLAG_FLAT_SCROLLBAR bandiera in base al valore della sua ScrollBarsEnabled proprietà.

Ti consiglio di impostare ScrollBarsEnabled false prima della creazione del controllo Webbrowser finestra.

Se non si desidera che la barra di scorrimento di un particolare elemento, come il body, div o textarea, vengono visualizzate, è possibile impostare i loro stili di overflow='hidden' o utilizzare lo scorrimento proprietà specifiche per elementi come doc.Corpo.SetAttribute("scroll","no").

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top