winform如何让动态创建的tabPage优先显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform如何让动态创建的tabPage优先显示相关的知识,希望对你有一定的参考价值。

每创建一个tabPage都优先显示出来

参考技术A 刚刚说的集合A还记得吗,让集合A中的tab和tabpage中的tab顺序保持一致,加入现在集合A中有三个元素a,b,c,tabpage中显示的真实顺序也是a,b,c(如果不是的话,就想办法让集合A中的元素顺序保持和tabpage中的一致),
1.点击tree中的d节点,首先和集合A中元素对比,发现没有重复项,则向A中添加d,并且向tabpage中添加新tab,最后选中集合A中元素为d的索引放在tabpage中执行tabpage.Select(3)(因为集合A中元素顺序和tabpage中tab顺序一致)
1.点击集合中已存在的tree节点b,循环集合A时发现b已存在,记录下b的索引放在tabpage中执行tabpage.Select(1)本回答被提问者采纳

我怎样才能使 WinForms TabPage 标题宽度适合它的标题?

【中文标题】我怎样才能使 WinForms TabPage 标题宽度适合它的标题?【英文标题】:How can i make WinForms TabPage header width fit it's title? 【发布时间】:2011-10-08 09:08:12 【问题描述】:

如何使 WinForms TabPage 标题宽度适合其标题? 这是问题所在。

【问题讨论】:

【参考方案1】:

谢谢,汉斯。 我没有创建类就使用了你的代码

//InitializeComponent
this.tabPresentations.HandleCreated += new System.EventHandler(TabControl_HandleCreated);

void TabControl_HandleCreated(object sender, System.EventArgs e)

     // Send TCM_SETMINTABWIDTH
     SendMessage((sender as TabControl).Handle, 0x1300 + 49, IntPtr.Zero, (IntPtr)4);

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

【讨论】:

【参考方案2】:

您需要测量字体。

试试这样的:

Dim tabPage As New TabPage
Dim width As Integer = 0
Dim valueToMeasure As String = <Your title Here>
Dim g As Graphics = tabPage.CreateGraphics()

width = CType(g.MeasureString(valueToMeasure, tabPage.Font).Width, Integer)

可能会为填充添加一个额外的机器人(宽度 = 宽度 +10)

已编辑:

<tab>.width = GetTabWidth(<Title>)

Private Function GetTabWidth (Byval title as String) as Integer

     Dim widthValue as Integer = 10    'Padding (Optional)

     Dim tabPage as New tabPage
     Dim g as Graphics = tabPage.CreateGraphics()

     widthValue += Ctype(g.measureString(title, tabPage.Font).Width, Integer)

     Return widthValue

End Function

【讨论】:

好的,我测过了,接下来呢? TabPage 没有宽度属性。 对不起,我习惯了氪星导航器!试试... .Size.Width = GetTabWidth() .Size 用于选项卡区域,而不用于选项卡标题。 你真的相信所有标签页的标题都和“+”标签一样小宽度是个好主意吗?【参考方案3】:

本机 Windows 选项卡控件允许覆盖默认的最小选项卡宽度。遗憾的是,该功能并未在 TabControl 包装类中公开。不过这是可以解决的。向您的项目添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到表单上。

using System;
using System.Windows.Forms;

class MyTabControl : TabControl 
    protected override void OnHandleCreated(EventArgs e) 
        base.OnHandleCreated(e);
        // Send TCM_SETMINTABWIDTH
        SendMessage(this.Handle, 0x1300 + 49, IntPtr.Zero, (IntPtr)10);
    
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

【讨论】:

以上是关于winform如何让动态创建的tabPage优先显示的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能使 WinForms TabPage 标题宽度适合它的标题?

C# winform- 选择卡问题 : 想要通过单击Tabpage A 中的按钮实现 转换到Tabpage B 中,请问如何实现?

Winform中选项卡问题 me是初学者,想问一下如何点击按钮,实现Tabpage A和Tabpage B之间的转换?

winform里面的tabpage如何进行赋值?

C# winform,怎么通过控件的Name属性判断某个控件是不是已经存在

c# winform 点击按钮切换tabcontrol标签