J'ai cherché le World Wide Web sans réponse appropriée. P>
dans mon application de formulaire Windows, je souhaite modifier la largeur d'une barre de défilement appartenant à un FlowLayOntPanel. P>
La barre de défilement est ajoutée "automatiquement" car le contenu du panneau de présentation de débit est plus grand le formulaire. P>
De ce que j'ai trouvé sur le Web, il semble être délicat. P>
Y a-t-il une solution à cela? P>
acclamations! p>
3 Réponses :
non, il n'y a aucun moyen de changer la largeur d'une barre de défilement affichée sur un seul contrôle fort> (bien qu'il existe un réglage à l'échelle du système qui affectera tous les barres de défilement em> dans tout Applications). P>
La vérité laid est que le contrôle de la barre de défilement de faiplesse est beaucoup plus compliqué qu'il n'y paraît. Fondamentalement, les barres de défilement sur le Malheureusement, si vous voulez vraiment personnaliser vos barres de défilement, vous allez avoir à masquer les barres de défilement intégrées et à rouler le vôtre. STRUT> Ce n'est pas aussi difficile que cela sonne, cependant, Si vous êtes prêt pour cela. Cet article sur codeProject Fournit une bonne promenade sur la création de votre propre barre de défilement skinnable en tant que contrôle de l'utilisateur et utilisez-la comme remplacement dans le contrôle du conteneur de votre choix. P> flowlayoutpanel code> sont dessinés par Windows elle-même (plutôt que la structure .NET) en raison de la
ws_hscroll code> et / ou
ws_vscroll code> ws_vscroll code> windows styles qui sont définis pour le contrôle dans les coulisses. Le
FlowLayOntPanel code> ne fournit aucune installation pour modifier ou modifier la manière dont ces barres de défilement intégrées sont dessinées. Contrairement aux autres modifications plus avancées de Winforms, aucun message de ce type ne peut envoyer à la procédure de la fenêtre du contrôle. Et pour aggraver les choses, les barres de défilement sont dessinées dans la zone non-client du
flowlayoutpanel code>, ce qui signifie que nous ne pouvons pas simplement remplacer son événement
peinture code> et manipuler les barres de défilement nous-mêmes. P>
Merci beaucoup pour la réponse Cody Gray! Je vais regarder dans l'article que vous avez lié. J'espère que cela aident les autres qui recherchent les mêmes informations.
@Anders: Je viens de réaliser que l'article est en C # et que votre question est étiquetée comme vb.net, mais la conversion entre les deux est relativement simple. Si vous rencontrez des ennuis, essayez l'un des convertisseurs en ligne comme celui fourni par DéveloppementFusion . Je suis heureux d'avoir pu aider!
Ouais, ce n'est pas un problème :) Si je peux juste obtenir la logique pour cela, je le ferai moi-même. Ne peut pas être paresseux, vous savez! ;) Merci de m'avoir mis au courant!
La réponse de Cody Grey est 100% correcte, même si je voulais ajouter plus de matériel de référence sur le sujet.
La manière dont les formulaires de Windows créent des barres de défilement sont via l'utilisation de styles de fenêtre Penser à une perspective d'API Windows, nous devons définir les styles de fenêtre à l'époque que nous créons le Heureusement, Windows Forms expose une propriété, Remplacement de la fonctionnalité de l'API Windows pour une barre de défilement est en réalité plus simple qu'il ne semble sembler; Cependant, ce n'est pas évident (bien pour moi de toute façon, je devais passer à la source à la source .net pour trouver la réponse). Pour ce faire, nous devons choisir le contrôle code> code> à hériter de créer notre propre ScrollAblecontrol em>. Si nous observons le code source pour donc, en bref, quand Nous allons à partir de Cela signifie que nous examinerions la ré-mise en œuvre: p> Alternativement, une approche simple peut être de créer un nouveau Le chemin est pris, il sera nécessaire de voir comment ws_hscroll code> et
ws_vscroll code>. Respectivement, ces styles sont responsables de l'activation des barres de défilement horizontales et verticales pour un
hwnd code>. Un
hwnd code> est une poignée de ressource native à une "fenêtre" em>, laquelle dans le lingo .NET correspond à un
contrôle code>. P>
hwnd code>. Ceci est fait par un appel à
créatewindow code>
, créatewindowex code>
ou Setwindowlong code>
. Naturellement, nous pouvons commencer à penser à utiliser p / invoquer pour nous aider, mais cela serait Soyez un fardeau tout comme cela signifie que nous devrions ré-implémenter des formulaires Windows à partir de zéro. P> Creatreparams a >, cela peut être remplacé pour spécifier les styles de fenêtre exacts, parmi les autres paramètres de création de la création code> code>. Cette propriété est à son tour consommée par la structure .NET afin qu'elle puisse créer le
hwnd code> avec les styles appropriés lorsque le contrôle
code> est instancié. P>
Personnalisation La barre de défilement h3>
system.windows.forms.scrollablecontrol code>
, nous voyons les styles suivants sont utilisés: p> ScrollAblecontrol code>, les barres de défilement horizontal et verticales natifs sont activées en fonction de sa logique interne. Nous pourrions accéder à la poignée de la fenêtre code> ScrollAblecontrol Code> puis appelez
Setwindowlong CODE> pour masquer les barres de défilement; Cependant, nous devrions garder une trace de tous les endroits que
ScrollAbecontrol code> interagit avec l'API Windows. En fait, il existe une fonction interne
contrôler.updatestyle () code> appelé sur la base de la présentation des barres de défilement ou non. Cette fonction réapplique efficacement les styles Windows ci-dessus et il serait probablement préférable de ne pas se battre avec elle. Ce serait une approche beaucoup plus propre de s'éloigner de l'API Windows et de s'étendre directement à partir de
Contrôle code>. Nous pouvons ensuite fournir quelles que soient les API que nous souhaitons avoir. P>
usercontrol code>. Cela nous permettrait d'utiliser le concepteur Visual Studio pour simplifier la configuration de nos boutons et des pistes de la barre de défilement. P>
ScrollAblecontrol code> fonctionne en interne dans l'ordre pour fournir une expérience utilisateur confortable. p> p>
Ceci si pour C # et par rapport à l'article publié dans la réponse acceptée par Cody Grey https://stackoverflow.com/a/ 4326046/4342139 .Je commentiez directement là-bas, mais je manque de la réputation pour cela.
Si vous êtes comme moi et suivant l'article de la réponse de Cody Gray, puis cacher la barre de défilement que vous seriez en utilisant des panneaux internes et extérieurs. Ce n'est pas une solution optimale et assez franchement 'bizarre et hacky'.J'ai trébubli sur un problème similaire avec une barre de défilement horizontale et a réussi à trouver une solution, et la même chose a fonctionné pour le rouleau vertical. C'est un peu moins hacheur (mais pas par beaucoup) et peut être atteint avec le code ci-dessous: p> notes: choisissez VeritCal ou horizontal ou à la fois du code ci-dessus .
Il est essentiel d'avoir une autoscroll défini sur FALSE, puis de true comme des paramètres non appliqués ou automatique est désactivé.
Réglage des défilations verticales / horizontales Le maximum à 0 semble être la seule chose dont il faut être nécessaire, mais jetant visible à FALSE ne semble pas le faire mal (ne semble pas fonctionner du tout, mais peut-être que je manque quelque chose). P> < / p>