2009-12-11 4 views
0

J'ai ce problème lors de la création d'un nouveau UserControl personnalisé. En détails, je crée un UserControl dérivé avec un DataGridView dont la propriété Anchor est définie sur [Left, Top, Right, Bottom] de sorte que DataGridView peut redimensionner chaque fois que les tailles du conteneur UserControl changent. Mais lorsque l'application s'exécute, le résultat n'est pas exactement attendu. Le bord droit et le bord inférieur DataGridView croissent toujours en dehors de la bordure UserControl. Pour comprendre ce problème, j'ai débogué et découvert que chaque fois qu'un UserControl est créé, sa taille est toujours par défaut à [100, 100] malgré que nous l'ayons défini sur [800, 600] ou toute autre chose. Je pense que c'est la cause du problème. Lorsque nous concevons le UserControl, nous utilisons une taille plus grande mais en runtime, sa taille est par défaut à [100, 100] donc le calcul automatique de la propriété Anchor devient inattendu.Problème avec la propriété Anchor des contrôles à l'intérieur de UserControl

Quelqu'un peut-il me donner un indice sur la façon de résoudre ce problème? J'ai une solution sale mais aussi parfois des dysfonctionnements. Ma solution est que dans le gestionnaire d'événements OnLoad de UserControl, je définis le bord droit et le bord inférieur des contrôles enfants. Cette solution fonctionne très bien pour la plupart de mes UserControl personnalisés mais parfois cela me rend mal compris. Parfois, le problème se produit toujours. Cela me rend confus.

Quelqu'un peut-il donner une explication claire et une solution complète à ce problème?

Merci à l'avance

Répondre

0

Il y a deux manières que vous pouvez résoudre ce problème, un moyen rapide et facile est de mettre le GridView dans un panneau ASP (avec les barres de défilement), et définir la largeur du panneau à 100%. Maintenant, la taille de la grille n'a pas d'importance car vous pouvez faire défiler verticalement et horizontalement.

+0

Comme quelqu'un avec le même problème, cela ne résout évidemment pas le problème. – HumbleWebDev

0

La seule solution que je peux trouver maintenant est de faire un événement onload avec le contrôle utilisateur (sorte de comme vous l'avez dit) sauf, définir la hauteur et la largeur du contrôle qui fonctionne mal par rapport au contrôle utilisateur parent. .. J'ai un datagridview et je le mets à la largeur - 50; et Hauteur/2,5; Cela semble l'empêcher de faire pousser ses parents, tout en lui donnant les effets croissants de l'ancrage. Je pense que pour une raison quelconque, l'ancre le fait ancrer dans la fenêtre plutôt que dans le contrôle utilisateur parent, ce qui provoque ce bug.

Questions connexes