wzk*_*wzk 1 c# tabs text multiline winforms
我已经在 Visual Basic 中看到了这一点(尽管我还没有看到代码,也没有看到它是如何在设计视图中完成的,如果可能的话)。有没有办法在 WinForms 中创建两行选项卡名称?请参阅附图,我已将其圈出以示强调。当然,一定有办法做到这一点。事实上附图是用VB6完成的,不幸的是我无法访问代码。
注意:如果这是一个坏主意或不是一个好的做法,请告诉我。另外,如果解决方案太复杂并且不值得探索,我愿意放弃它,但如果它足够简单,那将对我有很大帮助。
我的屏幕上的主要空间已经用完了,因为我们的一些表单上有 12 个选项卡(这是没有帮助的),并且我们的屏幕最大尺寸限制为 1280 x 720。非常感谢您的帮助。
不幸的是我不被允许发布图片,即这是我的第一篇文章。如果这有帮助,我会将它们发布到其他可能的地方。
也许这个编辑暂时会有帮助,(抱歉插图很差,考虑到(发布)编辑器的限制,这是我能做的最好的事情):
| 选项卡| 选项卡| 选项卡|
|第一名 | No.2| No.3|
上述选项卡标签(文本)的选项卡名称应有两行,例如Tab 1 No. 1、Tab 2 No. 2等,其中Tab 1位于第一行,No. 1位于第二行。 ..ETC。
完整的解决方案分布在TabControl及其TabPages。
要强制执行 a,请在's中NewLine插入 a 。\nTabPageText
tabPage1.Text = "Line one\nLine two";
Run Code Online (Sandbox Code Playgroud)
请注意,您需要代码来设置Text. 设置在里面Designer是不行的!(它采用Backslash字面意思而不是作为转义序列,因为它只提供单行字段,所以你也不能使用Shift-Enter..)
您仍然可以使用设计器,但必须强制执行newline代码,可能如下所示:
tabPage1.Text = tabPage1.Text.Replace("\\n", "\n");
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,在循环中:
foreach (TabPage tp in tabControl1.TabPages) tp.Text = tp.Text.Replace("\\n", "\n");
Run Code Online (Sandbox Code Playgroud)
为了腾出足够的空间,您可以将 放大Tab为ItemSize.Height40 到 48 像素,当然也取决于Font!:
tabControl1.ItemSize = new Size(tabControl1.ItemSize.Width, 42);
Run Code Online (Sandbox Code Playgroud)
结果:

请注意,除非您将高度设置得很大,否则inactiveTabPage的Texts'下降部分往往会在 处被切断。Bottom如果这是一个问题,我想你必须“所有者绘制”。听起来TabControl比实际上更难......:
将 Tabcontrol 设置为所有者绘制:
tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
Run Code Online (Sandbox Code Playgroud)
并将这段代码添加到 DrawItem 事件中:
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();
}
Run Code Online (Sandbox Code Playgroud)
这确实节省了空间;高度降至 34 像素,结果如下:

一件好事是,现在您也可以在选项卡中显示活动页面及其背景色,也就是说,如果您的页面有不同的背景色。
但请注意,由于系统不知道您将在 DrawItem 代码中执行什么操作,因此它将为整个未分割的文本保留足够的空间,从而导致选项卡过宽。如果您愿意,您可以通过将实际值存储Text在Tag每个页面中并Text仅根据最长行所需的长度来解决此问题:
if (tp.Tag == null)
{
tp.Tag = tp.Text;
tp.Text = "_____________"; // make large enough!!
}
string s = tp.Tag.ToString();
Run Code Online (Sandbox Code Playgroud)
string s并在通话中使用DrawString!
如果你想让它变得完美,你可以编写一个函数来测量每个TabPage Text及其换行位置,以找出必要的宽度。

| 归档时间: |
|
| 查看次数: |
5535 次 |
| 最近记录: |