Je vais tout à fait simplement aller de l'avant avec l'omission de la propriété AutoSize pour les contrôles Label et TextBox dans .NET Compact Framework. J'ai une application simple, qui est censé lister un tas de données de texte (généralement entre un-liners à quelques paragraphes de texte) dans un TabControl. Tout le reste fonctionne bien, mais mes tentatives pour redimensionner dynamiquement les contrôles Label/TextBox que j'utilise pour afficher le texte échouent lamentablement.AutoSize pour Label/TextBox dans .NET Compact Framework
est ici la façon dont je l'ai essayé de le faire:
/*
Variables:
s = The text intended for the TextBox
NewTB = TextBox object
width = Intended width
whiteSpaceAdjustment = amount of pixels per line to adjust "wasted" whitespace due to wrapping
*/
String[] linesArray = s.Replace(Environment.NewLine, "\n").Split(new char[] { '\n' });
int lines = 0;
int lineHeight = g.MeasureString(
s.Replace("\n", "").Replace("\r", ""),
LabelFont
).ToSize().Height;
foreach (String str in linesArray) {
if (str.Length == 0) {
lines++;
continue;
}
szz = g.MeasureString(str, LabelFont).ToSize();
lines += szz.Width/(width - whiteSpaceAdjustment);
lines += (szz.Width % width) != 0 ? 1 : 0;
}
NewTB.Height = lines * lineHeight;
NewTB.Width = width;
... mais le problème est que la plage nécessaire pour whiteSpaceAdjustment est trop énorme. Quand il est assez grand pour travailler sur les cas les plus extrêmes (les paragraphes sont composés de mots très longs), la plupart des boîtes finissent par être une ligne ou deux trop grandes.
Je vais probablement devoir mettre en place le mot enveloppant moi-même, mais avant que j'y aille, y at-il quelqu'un avec une bonne solution propre prêt pour cela?
Je serais éternellement reconnaissant!
Pas de soucis, j'ai eu le même problème moi-même. – stevehipwell
Ce lien est mort – thecoolmacdude