2009-09-27 6 views
2

Je voudrais savoir si je devrais programmer moi-même les éléments suivants ou utiliser un composant tiers. S'il y a une composante tierce qui correspond à la facture sans trop de bagages, j'apprécierais les recommandations.grille dessinée par le propriétaire - .NET

Je voudrais avoir un composant qui est une matrice de cellules, comme un contrôle de grille. Je n'ai pas besoin d'édition, pas de sélection, pas de redimensionnement dynamique des colonnes, pas de comportement de dessin de cellule par défaut, pas d'effets lorsque la souris se déplace sur les choses, pas de raccourcis clavier. Tout ce dont j'ai besoin est de pouvoir dessiner chaque cellule moi-même et si la taille de la grille dépasse l'espace disponible du composant parent, alors des barres de défilement devraient apparaître.

En d'autres termes, je voudrais pouvoir dire: grid.Invalidate()

puis-je obtenir un rappel pour chaque chose cellulaire visible comme ceci:

vide DrawCell (int x, int y, Graphics g, Rectangle cellDrawingRect)

+0

Combien de cellules auriez-vous besoin d'afficher au maximum? Nombre total de lignes/colonnes? –

Répondre

2

Mon conseil? Calculez la taille de la grille, créez une image de cette taille, dessinez votre grille et placez l'image dans un PictureBox, puis placez PictureBox dans un ScrollableControl.

Vous n'avez pas besoin de manipuler Control.Paint car la zone d'image gère cela pour vous.

Si vous êtes si incliné, vous pouvez mettre tout cela dans un UserControl. Cela rend votre code un peu plus réutilisable et plus portable.

+0

en utilisant cette méthode est-il également possible de lisser les morceaux de l'image que la boîte à images montre ou doit-il être complètement remplacé par une nouvelle image à chaque fois? –

+0

Non, vous pouvez redessiner sur la même image. Assurez-vous juste d'appeler PictureBox.Invalidate() lorsque vous avez fini de dessiner. –

0

Cela semble assez trivial si vous écrivez simplement votre propre contrôle (dérivé de ScrollableControl). Handle Control.Paint pour dessiner vos cellules et utiliser les propriétés HorizontalScroll et VerticalScroll pour ajuster vos barres de défilement.

0

Voici une diatribe plus tôt à moi exactement ce sujet:

Need help creating control to display data

Je recommande vivement de faire vous-même, d'autant plus que c'est essentiellement un contrôle de lecture seule. La plupart des composants de grille prêts à l'emploi sont construits pour faire beaucoup plus que ce dont vous avez besoin, et les contraindre à la forme dont vous avez besoin pourrait facilement prendre plus d'effort que d'écrire les vôtres à partir de zéro. Comme Charlie Salts l'a mentionné, il pourrait être plus facile de dessiner le tout sur un grand PictureBox, puis de le déplacer sur un plus petit Panel, mais cela dépendra de la taille de la grille. Les bitmaps peuvent prendre beaucoup de mémoire.

+0

Ouais j'ai oublié la taille de l'image bitmap. C'est une bonne raison pour laquelle quelqu'un devrait gérer Control.Paint à la place. –

+0

pas trop grand. peut-être 2500x2500 pixels maximum. Le sous-ensemble visible de ceci serait n'importe quoi inférieur ou égal à une taille de fenêtre standard. –

+0

@freddy: c'est 25 Mo de bitmap, ce qui est probablement bien pour vos besoins. Je fais beaucoup de travail dans .Net Compact Framework, où un Bitmap aussi gros serait catastrophique. – MusiGenesis

Questions connexes