标准System.Windows.Forms.TabControl组件在其包含的TabPages周围绘制边框。如果将Dock设置为Fill,这些边框将运行到父控件的边缘,但它们仍然存在,占用屏幕空间。
在Visual Studio中,如果将两个窗口停靠在同一个位置,则会在底部获得一组类似TabControl的选项卡,但两侧没有边框。
是否有可能让TabControl以这种方式显示其TabPages,两侧没有浪费的屏幕空间?如果可能的话,我想避免使用涉及自己绘制控件的解决方案。
答案 0 :(得分:5)
您应该尝试使用Anchor锚定四个边中的每一个,而不是使用Dock属性。然后你需要定位TabControl,使它在父级的所有边上都放置几个像素。这样就隐藏了边框,因为在父控件后面无法绘制它们。
答案 1 :(得分:1)
使用标准.NET选项卡控件,这不是直接可行的。这个的最终目标是什么?您是否尝试模拟与Visual Studio相同类型的选项卡式MDI样式显示?如果是这种情况,可以使用多种第三方解决方案 - 一些是开源的,一些是商业化的。
关于使用Anchor属性和设置大小以使其比实际窗口稍微大一点的其他响应可能有效,但我认为它看起来有点奇怪。无论主题和辅助功能设置如何,它都应该有效,但您可能最终必须以编程方式将大小设置为比父级大几个像素。
答案 2 :(得分:0)
<Grid>
<TabControl Name="tabControl1" >
<TabItem Header="tabItem1" Name="tabItem1">
<Grid />
</TabItem>
<TabItem Header="tabItem2" Name="tabItem2">
<Grid />
</TabItem>
<TabItem Header="tabItem3" Name="tabItem3">
<Grid />
</TabItem>
</TabControl>
</Grid>
答案 3 :(得分:0)
是否可以使TabControl以这种方式显示其TabPage,而在两侧没有浪费的屏幕空间?如果可能的话,我想避免涉及自己绘制控件的解决方案。
如果我正确理解了您的问题,并通读了currently accepted answer,您想知道如何使TabControl的Tabs延伸到整个控件上,而不会浪费空间,如下所示 :
为此,请设置 cTabControl.Dock = Fill ,然后执行以下函数并在 Form1_Shown()和 Form1_Resize()中进行调用>或您创建的任何“ Resize()”函数。
void ResizeTabs()
{
int numTabs = cTabControl.TabCount;
float totLen = 0;
using(Graphics g = CreateGraphics())
{
// Get total length of the text of each Tab name
for(int i = 0; i < numTabs; i++)
totLen += g.MeasureString(cTabControl.TabPages[i].Text, cTabControl.Font).Width;
}
int newX = (int)((cTabControl.Width - totLen) / numTabs) / 2;
cTabControl.Padding = new Point(newX, cTabControl.Padding.Y);
}
Sub ResizeTabs()
Dim numTabs As Integer = cTabControl.TabCount
Dim totLen As Decimal = 0
Using g As Graphics = CreateGraphics()
' Get total length of the text of each Tab name
For i As Integer = 0 To numTabs - 1
totLen += g.MeasureString(cTabControl.TabPages(i).Text, cTabControl.Font).Width
Next
End Using
Dim newX As Integer = ((cTabControl.Width - totLen) / numTabs) / 2
cTabControl.Padding = New Point(newX, cTabControl.Padding.Y)
End Sub
答案 4 :(得分:0)
我通过在标签标题中添加空格解决了同样的问题:
var pageAlignment = 50;
TabPage1.Text = TabPage1.Text.PadLeft(pageAlignment / 2).PadRight(pageAlignment); TabPage2.Text = TabPage2.Text.PadLeft(pageAlignment / 2).PadRight(pageAlignment); TabPage3.Text = TabPage3.Text.PadLeft(pageAlignment / 2).PadRight(pageAlignment);
答案 5 :(得分:-1)
锚定控件的左侧和右侧,宽度设置为父控件的宽度。
childControl.Anchor = Anchor.Left | Anchor.Right; childControl.Width = parentControl.Width;
答案 6 :(得分:-2)
不要停靠TabControl。将它拉伸到设计师身上,使其左右边缘延伸到窗口之外。