两行标签文字

时间:2015-04-29 22:19:01

标签: c# winforms text tabs multiline

我已经在Visual Basic中看到过这种情况(虽然我没有看到代码,或者如果可以的话,它是如何在设计视图中完成的)。有没有办法在WinForms中创建两行标签名称 ?请看附图,我把它圈起来强调。当然,必须有办法做到这一点。实际上附加的图片是在VB6中完成的,遗憾的是我无法访问代码。

注意:如果这是一个坏主意或不是一个好习惯,请告诉我。此外,如果解决方案过于复杂且不值得探索,我愿意放弃它,但如果它足够简单,那将对我有所帮助。

我的屏幕上没有 prime 不动产,因为我们的一些表格上有12个标签(它无法帮助),我们的屏幕限制为最大值1280 x 720.非常感谢任何帮助。

不幸的是我不允许发布图片,即这是我的第一篇文章。如果这有帮助,我会将它们发布到可能的其他地方。

也许这个编辑目前会有所帮助,(对于糟糕的插图感到抱歉,考虑到(发布)编辑器的限制,这是我能做的最好的事情):

|标签|标签|标签|
| No.1 | 2号| 3号|

以上标签标签(文字)在标签名称上应该有两行,例如 标签1号,标签2号2 等,其中标签1 位于第一行,否。 1 在第二行......等等。

以下是图片链接:http://imgur.com/gallery/LZSy5r5/new

1 个答案:

答案 0 :(得分:2)

完整的解决方案遍布TabControl及其TabPages

要强制执行NewLine,请在\n的{​​{1}}中插入TabPage

Text

请注意,您需要代码来设置tabPage1.Text = "Line one\nLine two"; 。在Text中设置它将无效! (它从字面上取代Designer而不是转义序列,因为它只提供单行字段,所以你不能使用Backslash ..)

您仍然可以使用设计器,但必须在代码中强制执行Shift-Enter,可能是这样的:

newline

或者,更好地,循环:

tabPage1.Text = tabPage1.Text.Replace("\\n", "\n");

为了腾出足够的空间,你可以将foreach (TabPage tp in tabControl1.TabPages) tp.Text = tp.Text.Replace("\\n", "\n"); 的{​​{1}}放大到40到48像素,当然这也取决于Tab!:

ItemSize.Height

结果:

enter image description here

请注意,非活动Font的{​​{1}}下降器往往会在tabControl1.ItemSize = new Size(tabControl1.ItemSize.Width, 42); 处被切断,除非您将高度设置得非常大。如果这是一个问题,我想你必须'拥有者'画出TabPage。听起来比它更难......:

将Tabcontrol设置为所有者绘图:

Texts'

并将这段代码添加到DrawItem事件中:

Bottom

这是一个真正的节省空间;高度降至34像素,导致:

enter image description here

其中一个好处是,现在您可以在选项卡中显示活动页面及其背景颜色,也就是说,如果您的页面有不同的背景颜色,那么这就是..

但请注意,由于系统不知道您将在DrawItem代码中执行的操作,因此它将为整个未分割文本保留足够的空间,从而导致选项卡过于宽泛。如果您愿意,可以通过将真实TabControl存储在每个页面的tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed; 中并仅在最长行所需的时间内生成private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) { if ( e.Index == tabControl1.SelectedIndex) e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); else e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds); TabPage tp = tabControl1.TabPages[e.Index]; Point pt = new Point(e.Bounds.X + 2, e.Bounds.Y + 4); e.Graphics.DrawString(tp.Text, tabControl1.Font, SystemBrushes.ControlText, pt); e.DrawFocusRectangle(); } 来解决此问题:

Text

并在Tag来电中使用Text

如果你想让它变得完美,你可以编写一个函数来测量每个if (tp.Tag == null) { tp.Tag = tp.Text; tp.Text = "_____________"; // make large enough!! } string s = tp.Tag.ToString(); 及其换行位置,以找出所需的宽度。

enter image description here