我有3个字符串,我想把它们放在3行的标签上。标签塞满,并且需要是一个固定的高度,所以我只希望每个字符串占用1行。也就是说,我希望将每个字符串的长度保持为~20个字符。问题是,我得到一个异常抛出的字符串是< 20个字符,因此我需要在将其写入标签之前评估它是否是。
我尝试的是:
mobPartLabel.Text = String.Format(
"String 1: {0} \nString 2: {1} \nString 3: {2}",
(string1.Length >= 20 ? string1.Substring(0, 19) : string1),
(string2.Length >= 20 ? string2.Substring(0, 19) : string2),
(string3.Length >= 20 ? string3.Substring(0, 19) : string3));
显然,这不起作用。 : - \但它基本上是我想要实现的。请原谅这个noobish问题;我是新手使用第三级运营商。我知道他们是什么以及他们做了什么,但我从来没有找到理由去实施一个> _>
有没有人对我在这里做错了什么有任何建议,或者如果完全不可能,那会是一个更好的方法?
编辑使用此代码
string string1 = "Rawr";
string string2 = "Rawr2";
string string3 = "Rawr3";
mobPartLabel.Text = String.Format(
"String 1: {0} \nString 2: {1} \nString 3: {2}",
(string1.Length >= 20 ? string1.Substring(0, 19) : string1),
(string2.Length >= 20 ? string2.Substring(0, 19) : string2),
(string3.Length >= 20 ? string3.Substring(0, 19) : string3));
我的所有标签都是“字符串1:”就是这样。这是完整而完整的标签。 :(
答案 0 :(得分:3)
您的代码运行正常。可能是标签本身的属性/大小的东西。
您是否将AutoSize
属性设置为false?
答案 1 :(得分:3)
此外,这可能会增加不必要的复杂性,因为您似乎是.NET和C#的新手,但是使用字符串提供的Enumerable类型的LINQ扩展方法,我们实际上可以进一步简化这一点我相信并进行以下更改
using System.Linq;
{... other usings and namespace/type declarations ...}
string string1 = "Rawr";
string string2 = "Rawr2";
string string3 = "Rawr3";
mobPartLabel.Text = String.Format(
"String 1: {0} \nString 2: {1} \nString 3: {2}",
(string1.Take(20)),
(string2.Take(20)),
(string3.Take(20)));
可以说使用Enumerable.Aggregate()可以使这更简单,但这不会是一段友好的代码介绍给你。这里重要的一点就是Take方法本身并不是字符串类的一部分,而是在类的设计被密封后添加的extension method Enumerable.Take(...),以便为开发人员添加额外的语法糖。
Linq扩展了几种BCL类型(最值得注意的是Enumerable),其扩展方法旨在使用lambda expressions启用流畅的查询表达式。 Linq不适合胆小的人在没有C#经验的情况下接受和使用,但它正在变得越来越普遍,因为lambda表达式,所以学习早期识别它们的用法很重要。当您理解委托,界面,特别是IEnumerable及其与C#语言的特殊关系(例如,foreach和yield)
时,请考虑自己准备好学习它们。