2009-09-24 19 views
0

Une taille de taille comme un rectangle sans texte mais avec une bordure et est invisible (pour un rectangle visuel sur la forme autour des contrôles mais pas pour contenir les contrôles) ou un panneau?Quelle est la plus petite empreinte dans C#

+0

Est-ce que vous créez une application Web ou une application de bureau? – user161433

+2

Je ne sais pas, mais je ne peux pas penser à une raison pour laquelle cela ferait une différence. Le CLR va gérer beaucoup plus de mémoire que l'un ou l'autre de ces objets, ce qui ressemble à une optimisation prématurée. – sipwiz

Répondre

3

Ce que vous voulez utiliser est un GroupBox. Pas que cela compte vraiment, très probablement, mais une étiquette devrait être moins cher qu'un panneau.

+0

Dans ce cas, il s'agit d'un formulaire avec un contrôle de tabulation de 32 pages. oui c'est énorme, mais c'est une forme rarement utilisée et qui doit contenir toutes les 32 pages. Le rectangle est seulement pour la séparation visible des contrôles sur les pages. J'ai des panneaux en ce moment et bien sûr, avec 32 pages c'est un chargement lent. Je vais essayer de remplacer les panneaux avec des étiquettes et voir si c'est mieux. Non, le design ne va pas changer, peu importe si le monde entier pense qu'il devrait être divisé en plusieurs formes: o) Merci! – TCH

+1

C'est un design horrible. Honnêtement, aucun contrôle de tabulation ne devrait avoir 32 pages, il n'est tout simplement pas utilisable. –

+0

Cela ne répond pas à la question. Parfois, les décisions de conception ne sont pas prises par le développeur et vous devez vivre avec. – TCH

1

La réponse est; peu importe qui a le plus petit encombrement, et si vous avez un problème de conception (par exemple, vous avez trop de contrôles sur votre formulaire). De toute façon, vous devriez simplement utiliser le contrôle qui correspond au travail, dans ce cas, un Panel ou un GroupBox.

0

S'il s'agit réellement d'un problème, la meilleure façon de fournir une séparation visuelle entre les contrôles est de gérer l'événement Paint de chaque page d'onglet et d'utiliser e.Graphics.FillRectangle (...) pour dessiner le séparateur. Vous vous débarrasseriez ainsi d'un très grand nombre de contrôles. Si vous ne pouvez pas faire quelque chose d'aussi simple que de dessiner un rectangle sous chaque contrôle sur chaque page à onglet, vous pouvez écrire une routine de génération de code que vous exécutez une fois sur le formulaire et pour chaque page d'onglet que vous générez quelque chose comme ça (en parcourant toutes les commandes de séparation sur la page):

List<Rectangle> rects = new List<Rectangle>(); 
rects.Add(new Rectangle(10, 40, 200, 5)); // position of first separator 
rects.Add(new Rectangle(10, 80, 200, 5)); // position of second separator 
// etc. 

Ensuite, vous copier-coller ces routines de code générés dans votre application, et de les utiliser pour l'événement de peinture de chaque page, comme suit:

SolidBrush brush = new SolidBrush(Color.PeachPuff); 
foreach (Rectangle rect in rects) 
{ 
    e.Graphics.FillRectangle(brush, rect); 
} 

Ensuite, vous supprimez tous les séparateurs de votre contrôle onglet. Ce que vous devriez obtenir est un tableau de type List<Rectangle> (une liste pour chaque page) que vous instanciez et remplissez l'événement Load du formulaire ou son constructeur (en utilisant le code généré).

Je dois réitérer ce que Ed a dit, cependant. Les formulaires .Net peuvent avoir un lot de contrôles sur eux sans aucun problème réel, donc si vous rencontrez des problèmes découlant d'avoir trop de contrôles sur le formulaire, vous feriez mieux de remanier le tout.