複数のページを含むWindowsフォームアプリケーションを開発しています。これを実装するためにTabControlを使用しています。ヘッダーを使用してタブを切り替える代わりに、アプリケーションでこれを制御したいユーザーがテキストボックスに入力して[次へ]ボタンをクリックすると、次のタブが開きます。
Tabcontrolを、好きなように模倣する手作りのパネルに置き換えることができます。
class MultiPagePanel : Panel
{
private int _currentPageIndex;
public int CurrentPageIndex
{
get { return _currentPageIndex; }
set
{
if (value >= 0 && value < Controls.Count)
{
Controls[value].BringToFront();
_currentPageIndex = value;
}
}
}
public void AddPage(Control page)
{
Controls.Add(page);
page.Dock = DockStyle.Fill;
}
}
次に、ページを追加し、現在の表示ページを設定します。
MultiPagePanel p;
// MyTabPage is a Control derived class that represents one page on your form.
MyTabPage page = new MyTabPage();
p.AddPage(page);
p.CurrentPageIndex = 0;
プロジェクトに新しいクラスを追加し、以下に示すコードを貼り付けます。コンパイル。ツールボックスの上部からフォームに新しいコントロールをドロップします。設計時にタブが表示されるため、設計中にタブを簡単に切り替えることができます。これらは実行時に非表示になります。コードでSelectedTabまたはSelectedIndexプロパティを使用してページを切り替えます。
using System;
using System.Windows.Forms;
public class TablessControl : TabControl {
protected override void WndProc(ref Message m) {
// Hide tabs by trapping the TCM_ADJUSTRECT message
if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1;
else base.WndProc(ref m);
}
}
tabControl1.Appearance = TabAppearance.FlatButtons;
tabControl1.ItemSize = new Size(0, 1);
tabControl1.SizeMode = TabSizeMode.Fixed;
新しいUserControlを作成し、TabControlWithoutHeaderなどの名前を付け、継承したUserControlをTabControlに変更し、コードを追加します。結果コードは次のようになります。
public partial class TabControlWithoutHeader: TabControl
{
public TabControlWithoutHeader()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x1328 && !DesignMode)
m.Result = (IntPtr)1;
else
base.WndProc(ref m);
}
}
コンパイル後、ツールボックスにTabControlWithoutHeaderコントロールが作成されます。フォームにドロップすると、デザイナーではヘッダーが表示されますが、実行時にはヘッダーは非表示になります。デザイナーでもそれらを非表示にする場合は、&& !DesignMode
。
お役に立てば幸いです。
このコードが必要でしたが、VB.netで変換したので。誰かがVB.Netでこのコードを必要とする場合は
Imports System
Imports System.Windows.Forms
Public Class TablessControl
Inherits System.Windows.Forms.TabControl
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
' Hide tabs by trapping the TCM_ADJUSTRECT message
If (m.Msg = Convert.ToInt32("0x1328", 16) And Not DesignMode) Then
m.Result = CType(1, IntPtr)
Else
MyBase.WndProc(m)
End If
End Sub
End Class
そして、C#での回答について@Hans Passantに感謝します。
Hans Passantの既存の答えを補完するために、タブの数がTablessControlの幅を超えたときにユーザーから矢印を非表示にする4つの方法を見つけました。必ずしもすべての人にとって完璧なソリューションはありませんが、あなた(または少なくともそれらの組み合わせ)に適している場合があります。
単にMultiline
を有効にします。これにより、最初に矢印が表示されなくなります。ただし、垂直方向のスペースは垂直方向に下向きに調整されるため、デザイナーでWYSIWYGが失われる可能性があり、TablessControl内のコントロールは下部で「切り取られる」場合もあります(ただし、開発者モードでのみ)。
上記のWYSIWYGの問題を解決するより高度なソリューションは、プログラムが実行された後にのみMultiline
を有効にすることです。このコンストラクターをTablessControlクラスに追加するだけです:
public TablessControl()
{
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
if (!designMode) Multiline = true;
}
開発者には、タブの単一行として表示されます。
TablessControlのフォントサイズを小さくします。各タブはそれに応じて縮小する必要があります。ユーザーにはタブが表示されないため、フォントサイズを4ptに設定しても問題はありません。
ただし、TablessControlのコンテンツのサイズも変更される可能性があるため、注意してください。これが発生した場合は、内部の各ウィジェットのフォントサイズを再編集します。その時点で、メインのTablessControlのフォントサイズを再度変更することを決定した場合でも、そのサイズのままになります。
このアプローチには、開発者に真のWYSIWYG垂直不動産をより厳密に表示するという利点もあります(ユーザーにとっては見栄えはよくなりますが、タブの高さのためにデザイナーの下部がわずかに切り取られる場合があります)。
このソリューションをソリューション1および2と組み合わせて、利点を蓄積できます。
このソリューションは、いずれかのタブに長いテキストがある場合、必ずしもそれほど優れているとは限りません。それを提案してくれたハンスに感謝します。
最初にTablessControlのSizeMode
を 'Fixed'に設定し、次にTablessControlのItemSize
Width
プロパティを小さい値に設定して、各タブの幅を小さくします。前述のWYSIWYGの問題に対処するために、ItemSize
Height
プロパティを調整することもお気軽に行ってください。ただし、ソリューション3はその問題に役立つ場合があります。
このソリューションを上記のソリューションと組み合わせて、さらに利点を蓄積できます。
本当にこれをしたいなら、あなたはこのようなことをすることができます
tcActionControls.Region = new Region(new RectangleF(
tbPageToShow.Left,
tbPageToShow.Top,
tbPageToShow.Width,
tbPageToShow.Height)
);
tcActionControls
はTabControl
であり、tbPageToShow
はTabPage
です。この正確な瞬間に表示します。
Shouldあなたのために働く。
よろしく。
TabPageCollectionからTabPageを削除してみてください:
TabControl.TabPageCollection tabCol = tabControl1.TabPages;
foreach (TabPage tp in tabCol)
{
if(condition)
{
tabCol.Remove(tp);
}
}
このソリューションはうまく機能しているようです- タブコントロールでタブを非表示にする方法?
フォームにTabcontrolを挿入します。デフォルトの名前はtabcontrol1です。
Visual Studioの[プロパティ]ペインでtabcontrol1が選択されていることを確認し、次のプロパティを変更します。
a。外観をボタンに設定
b。幅にItemSize 0を設定し、高さに1を設定します
c。マルチラインをTrueに設定
d。 SizeModeをFixedに設定します
これは、設計時にタスクを非表示にするので、設計時のタスクを完了した後に行うのが最適です-ナビゲートが困難になります!