我想通过确保显示的第二个字符串出现在第一个字符串输出的中间位置来将字符串对准另一个字符串。我该如何在C#中做这件事。在此先感谢将一个字符串与另一个字符串对齐
回答
你的问题有点不清楚(例子有助于澄清)。此外,你还没有完全指定你期望的输出(当第二个字符串不能居中在第一个字符串上,因为它太长了吗?)你会发现完全specifying your requirements将帮助你编写代码!这就是说,我认为你正在寻找类似以下的东西。
使用
public static string CenterWithRespectTo(string s, string against) {
if(s == null) {
throw new ArgumentNullException("s");
}
if(against == null) {
throw new AgrumentNullException("against");
}
if (s.Length > against.Length) {
throw new InvalidOperationException();
}
int halfSpace = (against.Length - s.Length)/2;
return s.PadLeft(halfSpace + s.Length).PadRight(against.Length);
}
使
string s = "Hello";
string against = "My name is Slim Shady";
Console.WriteLine(CenterWithRespectTo(s, against) + "!");
Console.WriteLine(against);
产生
Hello !
My name is Slim Shady
(将多余的 '!' 是为了让你能看到的填充。)
你可以很容易地修改这个在存在奇数额外空间的情况下,额外空间根据您的需要左右移动(目前它在右侧)(重构接受参数!)。
这只适用于非比例(固定宽度)字体。一般来说,对于所有字体......如果两个字符串不对称地填充了不同的宽度字符(第一个字符串具有宽字符的优先级(Ws,Ms,Hs等),并且第二个字符串具有窄字符的优势,如i,l ,标点符号等),那么这将不起作用。 – 2009-11-25 20:00:19
他说中心字符串,而不是字符串(文本)的中心视觉表示。 (我同意这样一个明显的陈述,即他的要求是模糊不清的。) – jason 2009-11-25 20:43:36
您的问题不清楚。也许.PadLeft
和.PadRight
方法会帮助你。
最简单的解决方案是将字符串放入水平对齐的文本框中,并将它们的textalignment属性设置为“居中”。
否则,你需要衡量字符串的长度像素,在指定的字体绘制的时候......那么抵销了两个长度之差的一半短字符串的开始x坐标...
string s1 = "MyFirstString";
string s2 = "Another different string";
Font f1 = new Font("Arial", 12f);
Font f2 = new Font("Times New Roman", 14f);
Graphics g = CreateGraphics();
SizeF sizeString1 = g.MeasureString(s1, f1),
sizeString2 = g.MeasureString(s2, f2);
float offset = sizeString2.Width - sizeString1.Width/2;
// Then offset (to the Left) the position of the label
// containing the second string by this offset value...
// offset to the left, because If the second string is longer,
// offset will be positive.
Label lbl1 = // Label control for string 1,
lbl2 = // Label control for string 2;
lbl1.Text = s1;
lbl1.Font = f1;
lbl1.Left = //Some value;
lbl2.Text = s2;
lbl2.Font = f2;
lbl2.Left == lbl1.Left - offset;
这会将字符串(文本)的可视表示集中在一个窗口中,但不一定是他试图解决的问题。 – jason 2009-11-25 20:43:06
- 1. 将一个字符串转换为另一个字符串
- 2. 将一个字符串到另一个字符串中的Java
- 3. 将字符串[index]与另一个字符串进行比较
- 4. 字符串与另一个字符串字符的比较
- 5. 串字符串与另一个字符串连接
- 6. C++将整个字符串拆分为另一个字符串
- 7. 在另一个字符串中查找一个字符串的字符串
- 8. 用PHP匹配一个字符串到另一个字符串
- 9. 确定一个字符串是不是另一个字符串
- 10. 一个字符串查找是否有另一个字符串
- 11. 从另一个字符串中创建一个字符串?
- 12. C - 从另一个字符串中减去一个字符串
- 13. 算一个字符串另一个字符串
- 14. 前面加上一个字符串到另一个字符串
- 15. 一个字符串包含另一个字符串
- 16. 搜索一个字符串是否另一个字符串
- 17. 字符在C另一个字符串
- 18. 用字符串或另一个字符
- 19. 另一个字符串
- 20. 字符串除了与另一个字符串包含“+”
- 21. 比较与另一个字符串数组中的字符串
- 22. 将字符串插入另一个字符串,每N个字符
- 23. 将字符串分配给另一个字符串
- 24. 将字符串随机插入另一个字符串
- 25. 如何将字符串附加到另一个字符串?
- 26. 将字符串插入另一个字符串
- 27. 如何将字符串插入另一个字符串?
- 28. 将字符串添加到另一个字符串中
- 29. C#将字符串放在另一个字符串之前
- 30. 将字符串拆分为另一个字符串
这是控制台输出,WPF,还是什么? – HackedByChinese 2009-11-25 19:22:32
您是在谈论ASP.NET,控制台还是Web窗体? – 2009-11-25 19:22:37
什么......那个?是吧? – 2009-11-25 19:22:38