浅谈C#tabcontrol应用

article/2025/10/10 18:54:19

作为Winfrom开发者来说,我们很多时候会用到tabcontrol来实现和网页标签页相关的效果。同时微软自带的控件样式不符合我们的需求,我们该如何去实现更加美观且可以自定义的组合控件呢?带着这个问题进入我们今天的主题,组合控件tabcontrol实现。

我们用的是界面库为DSkin.dll,简单介绍下,DSkin是干什么的。界面库设计工具DSKin是DSkin界面库官网(www.dskin.cn)开发的Winfrom DirectUI界面库。Dskin可以动态Alpha混合,支持窗体和控件的透明度混合效果,以及多个控件叠加的效果,支持窗体设置透明色和透明图片直接呈现出来,制作异形窗体简单快速,以此同时,Dskin内置了许多个虚拟控件,绘制高效,无句柄,资源占用极低,控件可以相互嵌套和组合。相对于微软的原生Winform控件库而言,用Dskin开发的界面即使设置大张的背景图及控件比较多的时候不会出现闪烁。

现在正式切入我们今天的主题,我们先看下界面效果图,如图1所示界面显示了两种效果,分别是正常的标签页和激活的标签页。该界面效果可以通过CreateTempItemCount来创建效果效果,然后通过扩展的属性来调整样式。扩展属性如图2所示,这些属性是我们创建的属性,可以对属性进行修改或新增从而符合我们的需求。

图1 效果展示图


图2 控件扩展属性说明

我们组合控件是继承于DSkin.Controls.DSkinUserControl,控件主要由DSkinTabBar、DSkinTabControl组合实现。界面设计效果如图3所示,除了上述的主要控件之外,我们还添加了DSkinScrollBar(滚动条)、RichTextBox(富文本编辑框,用于计算文字所占宽度)、ContextMenuStrip(右键菜单栏)、ToolTip(提示框,用于属性滑过Item时显示对应的文本信息)。


图3 控件组合界面展示

由于我们的继承对象为UserControl,为此我们的组合控件除了具有了UserControl本身拥有的属性,我们还可以自己扩展属性。比如上述讲到的CreateTempItemCount,那如何创建呢?我们可以定义一个Public属性方法,我们可以设置该属性的默认值、指定属性或事件的功能说明,对应的代码关键词分别为DefaultValue、Description。实例代码如下:

        private int _CreateTempItemCount = 0;[DefaultValue(0)][Description("用于测试查看效果,实际使用请将其移除,设置为0清空")]public int CreateTempItemCount{get { return _CreateTempItemCount; }set{_CreateTempItemCount = value;this.dSkinTabBar.Items.Clear();this.dSkinTabControl.TabPages.Clear();for (int i = 0; i < _CreateTempItemCount; i++){TempCreate(i.ToString(), "测试样式" + i);}}}

扩展属性也创建完了,接下来就是创建标签页及页面绑定关系,由于我们使用的是TabControl,其本身就具有标签页的功能,我们为了让DSkinTabBar来替代标签功能,我们需要对TabControl的"ItemSize"属性设置为"0,1",同时将DSkinTabBar与DSkinTabControl绑定起来,则属性TabControl与我们创建的DSkinTabControl关联,这样即可相互影响。

我们的控件要求功能既能加载Control同时加载Form,因此我们需要针对两种不同的情况创建不同的方法。我们定义了两个属性dicControl和dicForm,用于右键菜单栏使用以及释放资源使用。

        #region 定义/// <summary>/// 用于关闭释放资源Control/// </summary>Dictionary<string, Control> dicControl = new Dictionary<string, Control>();/// <summary>/// 用于关闭释放资源Form/// </summary>Dictionary<string, Form> dicForm = new Dictionary<string, Form>();#endregion

我们标签页的宽度除了可以自定义设置,同时还可以根据传入的文本内自动计算所需要的宽度。这次将采用到RichTextBox控件来辅助实现,具体实现代码如下:

        #region 计算Item的宽度 /// <summary>/// 计算显示框高度和宽度,英文字体和中文以及标点、数字的宽度各不相同,需计算/// </summary>/// <param name="mess">文本</param>/// <param name="width">宽度</param>private int CalcItemWidth(string mess, int width){int Linewidth; //显示对话内容容器的宽度和高度//临时建立一个容器装入内容RichTextBox canv_Rich = new RichTextBox();//先取全部Rtf的值canv_Rich.Rtf = mess;//再按照Txt判断文字//判断中文MatchCollection zh = Regex.Matches(canv_Rich.Text, @"[\u4e00-\u9fa5]", RegexOptions.IgnoreCase | RegexOptions.Singleline);//判断中文标点MatchCollection zhdot = Regex.Matches(canv_Rich.Text, @"[,。;?~!:‘“”’【】()]", RegexOptions.IgnoreCase | RegexOptions.Singleline);//判断数字MatchCollection en = Regex.Matches(canv_Rich.Text, @"[1234567890]", RegexOptions.IgnoreCase | RegexOptions.Singleline);//其余为英文,并计算总宽度Linewidth = (zh.Count + zhdot.Count) * 13 + en.Count * 8 + (canv_Rich.Text.Length - zh.Count - zhdot.Count - en.Count) * 7;//接收数据内容中是否包含图像int havePic = 0;havePic = Regex.Matches(canv_Rich.Rtf, "Paint.Picture").Count;//加上图像宽度Linewidth += havePic * 33;//判断极值//if (Linewidth > (12 * 13)) { Linewidth = 12 * 13; }if (Linewidth < width) { Linewidth = width; }return Linewidth;}#endregion

由于篇幅的原因,下方直接贴出代码,代码中有相对的说明,应该可以看到懂。

TabControlYd.cs完整代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DSkin.DirectUI;
using DSkin.Controls;
using System.Diagnostics;
using System.Runtime;
using System.Text.RegularExpressions;namespace SCommon
{public partial class TabControlYd : DSkin.Controls.DSkinUserControl{#region 构造函数public TabControlYd(){InitializeComponent();this.Dock = DockStyle.Fill;}#endregion#region 定义/// <summary>/// 用于关闭释放资源Control/// </summary>Dictionary<string, Control> dicControl = new Dictionary<string, Control>();/// <summary>/// 用于关闭释放资源Form/// </summary>Dictionary<string, Form> dicForm = new Dictionary<string, Form>();#endregion#region 属性private Color _DownItemColor = Color.FromArgb(60, 150, 180);[DefaultValue(typeof(Color), "60,150,180")][Description("鼠标按下Item背景色")]public Color DownItemColor{get { return _DownItemColor; }set{_DownItemColor = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.BaseColor = _DownItemColor;}}}private Color _NormalItemColor = Color.FromArgb(80, 200, 240);[DefaultValue(typeof(Color), "80,200,240")][Description("Item正常的背景色")]public Color NormalItemColor{get { return _NormalItemColor; }set{_NormalItemColor = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.BaseColor = _NormalItemColor;}}}private Padding _ItemMargin = new Padding(10, 10, 0, 0);[DefaultValue(typeof(Padding), "10, 10, 0, 0")][Description("Item与Item之间的距离")]public Padding ItemMargin{get { return _ItemMargin; }set{_ItemMargin = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.Margin = _ItemMargin;}}}private Color _ItemBackColor = Color.FromArgb(135, 206, 235);[DefaultValue(typeof(Color), "135,206,235")][Description("标签页栏背景色设置")]public Color ItemBackColor{get { return _ItemBackColor; }set{_ItemBackColor = value;this.dSkinTabBar.BackColor = _ItemBackColor;}}private int _TabbarHeight = 40;[DefaultValue(40)][Description("标签页栏高度设置")]public int TabbarHeight{get { return _TabbarHeight; }set{_TabbarHeight = value;this.dSkinTabBar.Height = _TabbarHeight;}}private Font _ItemFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold);[DefaultValue(typeof(Font), "微软雅黑, 9F, System.Drawing.FontStyle.Bold")][Description("Item字体设置")]public Font ItemFont{get { return _ItemFont; }set{_ItemFont = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.Font = _ItemFont;}}}private Color _ItemForeColor = Color.FromArgb(255, 255, 255);[DefaultValue(typeof(Color), "255,255,255")][Description("设置Item字体颜色")]public Color ItemForeColor{get { return _ItemForeColor; }set{_ItemForeColor = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.ForeColor = _ItemForeColor;}}}private Size _ItemSize = new System.Drawing.Size(120, 35);[DefaultValue(typeof(Size), "120,35")][Description("设置Item大小")]public Size ItemSize{get { return _ItemSize; }set{_ItemSize = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.Size = _ItemSize;}}}private bool _IsShowButtonBorder = true;[DefaultValue(true)][Description("是否显示边框")]public bool IsShowButtonBorder{get { return _IsShowButtonBorder; }set{_IsShowButtonBorder = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.ShowButtonBorder = _IsShowButtonBorder;}}}private int _ItemRadius = 15;[DefaultValue(15)][Description("圆弧的大小")]public int ItemRadius{get { return _ItemRadius; }set{_ItemRadius = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.Radius = _ItemRadius;}}}private Color _ItemBorderColor = Color.FromArgb(224, 224, 224);[DefaultValue(typeof(Color), "224,224,224")][Description("设置Item的边框颜色")]public Color ItemBorderColor{get { return _ItemBorderColor; }set{_ItemBorderColor = value;foreach (DSkinTabItem item in dSkinTabBar.Items){item.ButtonBorderColor = _ItemBorderColor;}}}private bool _IsShowMouseItem = true;[DefaultValue(true)][Description("是否显示删除按钮")]public bool IsShowMouseItem{get { return _IsShowMouseItem; }set { _IsShowMouseItem = value; }}private int _CreateTempItemCount = 0;[DefaultValue(0)][Description("用于测试查看效果,实际使用请将其移除,设置为0清空")]public int CreateTempItemCount{get { return _CreateTempItemCount; }set{_CreateTempItemCount = value;this.dSkinTabBar.Items.Clear();this.dSkinTabControl.TabPages.Clear();for (int i = 0; i < _CreateTempItemCount; i++){TempCreate(i.ToString(), "测试样式" + i);}}}/// <summary>/// 摘要:【外部快捷键操作】/// 0代表:关闭当前标签页/// 1代表:除此之外全部关闭/// 2代表:关闭所有的标签页/// default:关闭当前标签页/// </summary>public int ExternalShortcuts{set{switch (value){case 0:关闭当前标签页ToolStripMenuItem_Click(null, null);break;case 1:除此之外全部关闭ToolStripMenuItem_Click(null, null);break;case 2:关闭所有的标签页ToolStripMenuItem_Click(null, null);break;default:关闭当前标签页ToolStripMenuItem_Click(null, null);break;}}}#endregion#region 临时创建private void TempCreate(string key, string text){if (this.dSkinTabControl != null){this.dSkinTabControl.TabPages.Add(key, text);this.dSkinTabControl.SelectTab(key);DSkinTabItem _dSkinTabItem = new DSkinTabItem();_dSkinTabItem.Text = text;_dSkinTabItem.Font = _ItemFont;_dSkinTabItem.ForeColor = _ItemForeColor;_dSkinTabItem.Tag = key;_dSkinTabItem.MouseEnter += new System.EventHandler<System.Windows.Forms.MouseEventArgs>(this.dSkinTabItem_MouseEnter);_dSkinTabItem.MouseLeave += new System.EventHandler(this.dSkinTabItem_MouseLeave);_dSkinTabItem.MouseClick += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.dSkinTabItem_MouseClick);//  _dSkinTabItem.BaseColor = _NormalItemColor;_dSkinTabItem.IsPureColor = true;_dSkinTabItem.ButtonBorderColor = _ItemBorderColor;_dSkinTabItem.Margin = _ItemMargin;_dSkinTabItem.Radius = _ItemRadius;_dSkinTabItem.ShowButtonBorder = _IsShowButtonBorder;_dSkinTabItem.Size = _ItemSize;this.dSkinTabBar.Items.Add(_dSkinTabItem);foreach (DSkinTabItem item in dSkinTabBar.Items){item.BaseColor = _NormalItemColor;}_dSkinTabItem.BaseColor = _DownItemColor;DuiButton _duiButton = new DuiButton();_duiButton.Tag = key;_duiButton.NormalImage = Properties.Resources.tabpage_close_normal;_duiButton.Location = new Point(_dSkinTabItem.Width - 20, (_dSkinTabItem.Height - 16) / 2);_duiButton.MouseEnter += new System.EventHandler<System.Windows.Forms.MouseEventArgs>(this.duiButton_MouseEnter);_duiButton.MouseLeave += new System.EventHandler(this.duiButton_MouseLeave);_duiButton.MouseDown += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.duiButton_MouseDown);_duiButton.MouseClick += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.duiButton_MouseClick);_dSkinTabItem.Controls.Add(_duiButton);_duiButton.Visible = false;}}#endregion#region 方法/// <summary>/// 用于判断是否已经添加了控件/// </summary>private Dictionary<string, Control> dictTabContrils = new Dictionary<string, Control>();/// <summary>/// TabControl添加标签页Control/// </summary>/// <param name="_control">需要添加的控件</param>       /// <param name="key">区别专用</param>/// <param name="text">显示在Item上的文本</param>public void AddItemControl(Control _control, string key, string text){if (key == null) return;if (!dictTabContrils.ContainsKey(key)){if (this.dSkinTabControl != null){DSkinTabItem _dSkinTabItem = new DSkinTabItem();_dSkinTabItem.Text = text;_dSkinTabItem.ToolTip = text;_dSkinTabItem.Font = _ItemFont;_dSkinTabItem.ForeColor = _ItemForeColor;_dSkinTabItem.Tag = key;_dSkinTabItem.MouseEnter += new System.EventHandler<System.Windows.Forms.MouseEventArgs>(this.dSkinTabItem_MouseEnter);_dSkinTabItem.MouseLeave += new System.EventHandler(this.dSkinTabItem_MouseLeave);_dSkinTabItem.MouseClick += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.dSkinTabItem_MouseClick);if (_IsShowMouseItem)_dSkinTabItem.ContextMenuStrip = this.contextMenuStrip;//  _dSkinTabItem.BaseColor = _NormalItemColor;_dSkinTabItem.IsPureColor = true;_dSkinTabItem.ButtonBorderColor = _ItemBorderColor;_dSkinTabItem.Margin = _ItemMargin;_dSkinTabItem.Radius = _ItemRadius;_dSkinTabItem.ShowButtonBorder = _IsShowButtonBorder;_dSkinTabItem.Size = _ItemSize;this.richTextBox1.Text = text;_dSkinTabItem.Width = CalcItemWidth(this.richTextBox1.Rtf, _ItemSize.Width);this.dSkinTabBar.Items.Add(_dSkinTabItem);IsShowScrollBar();foreach (DSkinTabItem item in dSkinTabBar.Items){item.BaseColor = _NormalItemColor;}_dSkinTabItem.BaseColor = _DownItemColor;dictTabContrils.Add(key, _control);this.dSkinTabControl.TabPages.Add(key, text);this.dSkinTabControl.TabPages[key].AutoScroll = true;this.dSkinTabControl.SelectTab(key);_control.Dock = DockStyle.Fill;_control.Show();this.dSkinTabControl.TabPages[key].Controls.Add(_control);if (!dicControl.ContainsKey(key))dicControl.Add(key, _control);if (_IsShowMouseItem){DuiButton _duiButton = new DuiButton();_duiButton.Tag = key;_duiButton.NormalImage = Properties.Resources.tabpage_close_normal;_duiButton.Cursor = System.Windows.Forms.Cursors.Hand;_duiButton.Location = new Point(_dSkinTabItem.Width - 20, (_dSkinTabItem.Height - 16) / 2);_duiButton.MouseEnter += new System.EventHandler<System.Windows.Forms.MouseEventArgs>(this.duiButton_MouseEnter);_duiButton.MouseLeave += new System.EventHandler(this.duiButton_MouseLeave);_duiButton.MouseDown += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.duiButton_MouseDown);_duiButton.MouseClick += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.duiButton_MouseClick);_dSkinTabItem.Controls.Add(_duiButton);_duiButton.Visible = false;}// SCommon.ResettingFont.SettingFont2Control(_control);}}else{this.dSkinTabControl.SelectTab(key);foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.Tag.ToString() != key)item.BaseColor = _NormalItemColor;elseitem.BaseColor = _DownItemColor;}}}/// <summary>/// TabControl添加标签页form/// </summary>/// <param name="form">需要添加的控件</param>       /// <param name="key">区别专用</param>/// <param name="text">显示在Item上的文本</param>public void AddItemControlForForm(Form form, string key, string text){if (!dictTabContrils.ContainsKey(key)){if (this.dSkinTabControl != null){DSkinTabItem _dSkinTabItem = new DSkinTabItem();_dSkinTabItem.Text = text;_dSkinTabItem.ToolTip = text;_dSkinTabItem.Font = _ItemFont;_dSkinTabItem.ForeColor = _ItemForeColor;_dSkinTabItem.Tag = key;_dSkinTabItem.MouseEnter += new System.EventHandler<System.Windows.Forms.MouseEventArgs>(this.dSkinTabItem_MouseEnter);_dSkinTabItem.MouseLeave += new System.EventHandler(this.dSkinTabItem_MouseLeave);_dSkinTabItem.MouseClick += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.dSkinTabItem_MouseClick);_dSkinTabItem.MouseDoubleClick += _dSkinTabItem_MouseDoubleClick;if (_IsShowMouseItem)_dSkinTabItem.ContextMenuStrip = this.contextMenuStrip;//  _dSkinTabItem.BaseColor = _NormalItemColor;_dSkinTabItem.IsPureColor = true;_dSkinTabItem.ButtonBorderColor = _ItemBorderColor;_dSkinTabItem.Margin = _ItemMargin;_dSkinTabItem.Radius = _ItemRadius;_dSkinTabItem.ShowButtonBorder = _IsShowButtonBorder;_dSkinTabItem.Size = _ItemSize;this.richTextBox1.Text = text;_dSkinTabItem.Width = CalcItemWidth(this.richTextBox1.Rtf, _ItemSize.Width);this.dSkinTabBar.Items.Add(_dSkinTabItem);IsShowScrollBar();foreach (DSkinTabItem item in dSkinTabBar.Items){item.BaseColor = _NormalItemColor;}_dSkinTabItem.BaseColor = _DownItemColor;dictTabContrils.Add(key, form);this.dSkinTabControl.TabPages.Add(key, text);this.dSkinTabControl.TabPages[key].AutoScroll = true;this.dSkinTabControl.SelectTab(key);form.TopLevel = false;form.AutoScroll = true;form.Dock = DockStyle.Fill;form.Show();this.dSkinTabControl.TabPages[key].Controls.Add(form);if (!dicForm.ContainsKey(key))dicForm.Add(key, form);if (_IsShowMouseItem){DuiButton _duiButton = new DuiButton();_duiButton.Tag = key;_duiButton.NormalImage = Properties.Resources.tabpage_close_normal;_duiButton.Location = new Point(_dSkinTabItem.Width - 20, (_dSkinTabItem.Height - 16) / 2);_duiButton.MouseEnter += new System.EventHandler<System.Windows.Forms.MouseEventArgs>(this.duiButton_MouseEnter);_duiButton.MouseLeave += new System.EventHandler(this.duiButton_MouseLeave);_duiButton.MouseDown += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.duiButton_MouseDown);_duiButton.MouseClick += new System.EventHandler<DSkin.DirectUI.DuiMouseEventArgs>(this.duiButton_MouseClick);_dSkinTabItem.Controls.Add(_duiButton);_duiButton.Visible = false;}// SCommon.ResettingFont.SettingFont2Control(form);}}else{this.dSkinTabControl.SelectTab(key);foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.Tag.ToString() != key)item.BaseColor = _NormalItemColor;elseitem.BaseColor = _DownItemColor;}}}void _dSkinTabItem_MouseDoubleClick(object sender, DuiMouseEventArgs e){DSkinTabItem item = (DSkinTabItem)sender;if (dicForm.ContainsKey(item.Tag.ToString())){SCommon.PublicForms.SimpleDragDropForm _form = new SCommon.PublicForms.SimpleDragDropForm(this, item.Tag.ToString(), dicForm[item.Tag.ToString()]);_form.Text = item.Text;_form.Show();dSkinTabBar.Items.Remove(item);dictTabContrils.Remove(item.Tag.ToString());dSkinTabControl.TabPages.RemoveByKey(item.Tag.ToString());dicForm.Remove(item.Tag.ToString());}}/// <summary>/// 判断TabPages是否含有指定控件/// </summary>/// <param name="key"></param>/// <returns></returns>public bool IsContainsKey(string key){if (this.dSkinTabControl.TabPages.ContainsKey(key))return true;elsereturn false;}#endregion#region 鼠标事件private void duiButton_MouseLeave(object sender, EventArgs e){DuiButton btn = (DuiButton)sender;btn.NormalImage = Properties.Resources.tabpage_close_normal;}private void duiButton_MouseEnter(object sender, MouseEventArgs e){DuiButton btn = (DuiButton)sender;btn.NormalImage = Properties.Resources.tabpage_mousemove;}private void duiButton_MouseClick(object sender, DuiMouseEventArgs e){DuiButton btn = (DuiButton)sender;foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.Tag.ToString() == btn.Tag.ToString()){if (_IsCloseingTips){messageYesNo _messageYesNo = new messageYesNo(0, "您确定要关闭当前选项卡?");if (_messageYesNo.ShowDialog() != DialogResult.OK)return;else{if (ClickEvent != null)ClickEvent("", item.Tag.ToString());}}if (UserControlClosing != null)UserControlClosing(sender, e);dSkinTabBar.Items.Remove(item);dictTabContrils.Remove(item.Tag.ToString());dSkinTabControl.TabPages.RemoveByKey(btn.Tag.ToString());if (dicControl.ContainsKey(btn.Tag.ToString())){dicControl[btn.Tag.ToString()].Dispose();dicControl.Remove(btn.Tag.ToString());}if (dicForm.ContainsKey(btn.Tag.ToString())){dicForm[btn.Tag.ToString()].Close();dicForm[btn.Tag.ToString()].Dispose();dicForm.Remove(btn.Tag.ToString());}if (ChangTageKey != null){if (dSkinTabBar.Items.Count > 0)ChangTageKey(dSkinTabControl.SelectedTab.Name);}break;}}if (_IsCloseingTips){if (ClickEvent != null)ClickEvent("统计", dSkinTabBar.Items.Count.ToString());}else{if (ClickEvent != null)ClickEvent("统计", dSkinTabBar.Items.Count.ToString());}IsShowScrollBar();}private void duiButton_MouseDown(object sender, DuiMouseEventArgs e){DuiButton btn = (DuiButton)sender;btn.NormalImage = Properties.Resources.tabpage_mousedown;}private void dSkinTabItem_MouseEnter(object sender, MouseEventArgs e){DSkinTabItem item = (DSkinTabItem)sender;foreach (DuiButton btn in item.Controls){btn.Visible = true;}}private void dSkinTabItem_MouseLeave(object sender, EventArgs e){DSkinTabItem item = (DSkinTabItem)sender;foreach (DuiButton btn in item.Controls){btn.Visible = false;}}private void dSkinTabItem_MouseClick(object sender, DuiMouseEventArgs e){DSkinTabItem item = (DSkinTabItem)sender;foreach (DSkinTabItem _dskinTabItem in dSkinTabBar.Items){_dskinTabItem.BaseColor = _NormalItemColor;}item.BaseColor = _DownItemColor;}#endregion#region 判断是不是在设计器public static bool IsDesignMode(){bool returnFlag = false;#if DEBUGif (LicenseManager.UsageMode == LicenseUsageMode.Designtime){returnFlag = true;}else if (Process.GetCurrentProcess().ProcessName == "devenv"){returnFlag = true;}
#endifreturn returnFlag;}#endregion#region 标签页关闭事件private void 关闭当前标签页ToolStripMenuItem_Click(object sender, EventArgs e){try{if (this.dSkinTabControl.TabPages.Count > 0){foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.BaseColor == _DownItemColor){dSkinTabBar.Items.Remove(item);dictTabContrils.Remove(item.Tag.ToString());dSkinTabControl.TabPages.RemoveByKey(item.Tag.ToString());if (dicControl.ContainsKey(item.Tag.ToString())){dicControl[item.Tag.ToString()].Dispose();dicControl.Remove(item.Tag.ToString());}if (dicForm.ContainsKey(item.Tag.ToString())){dicForm[item.Tag.ToString()].Close();dicForm[item.Tag.ToString()].Dispose();dicForm.Remove(item.Tag.ToString());}break;}}IsShowScrollBar();}if (this.dSkinTabControl.TabPages.Count > 0){DSkinTabItem item = (DSkinTabItem)dSkinTabBar.Items[0];item.BaseColor = _DownItemColor;}}catch (Exception) { }}private void 关闭所有的标签页ToolStripMenuItem_Click(object sender, EventArgs e){try{if (this.dSkinTabControl.TabPages.Count > 0){this.dSkinTabBar.Items.Clear();this.dSkinTabControl.TabPages.Clear();dictTabContrils.Clear();}if (_IsCloseingTips){if (ClickEvent != null)ClickEvent("统计", dSkinTabBar.Items.Count.ToString());}else{if (ClickEvent != null)ClickEvent("统计", dSkinTabBar.Items.Count.ToString());}IsShowScrollBar();if (dicControl.Count > 0){foreach (string key in dicControl.Keys){if (!dicControl[key].IsDisposed)dicControl[key].Dispose();}}if (dicForm.Count > 0){foreach (string key in dicForm.Keys){dicForm[key].Close();if (!dicForm[key].IsDisposed)dicForm[key].Dispose();}}System.GC.Collect();dicControl.Clear();dicForm.Clear();}catch (Exception) { }}private void 除此之外全部关闭ToolStripMenuItem_Click(object sender, EventArgs e){try{DSkinTabItem _DSkinTabItem = new DSkinTabItem();TabPage _TabPage = new TabPage();foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.BaseColor == _DownItemColor){_DSkinTabItem = item;_TabPage = this.dSkinTabControl.TabPages[item.Tag.ToString()];}elsedictTabContrils.Remove(item.Tag.ToString());}this.dSkinTabBar.Items.Clear();this.dSkinTabControl.TabPages.Clear();this.dSkinTabBar.Items.Add(_DSkinTabItem);this.dSkinTabControl.Controls.Add(_TabPage);IsShowScrollBar();foreach (string key in dicControl.Keys){if (key != _DSkinTabItem.Tag.ToString()){if (!dicControl[key].IsDisposed){dicControl[key].Dispose();dicControl.Remove(key);}}}foreach (string key in dicForm.Keys){if (key != _DSkinTabItem.Tag.ToString()){dicForm[key].Close();if (!dicForm[key].IsDisposed){dicForm[key].Dispose();dicForm.Remove(key);}}}System.GC.Collect();}catch (Exception) { }}#endregion#region 滚动条改变事件/// <summary>/// 滚动条改变事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void dSkinScrollBar_ValueChanged(object sender, EventArgs e){double TempValue = 0.0;TempValue = this.dSkinScrollBar.Value / 10d;this.dSkinTabBar.Value = TempValue;}#endregion#region 是否显示滚动条/// <summary>/// 是否显示滚动条/// </summary>private void IsShowScrollBar(){int tempWidth = 0;foreach (DSkinTabItem item in dSkinTabBar.Items){tempWidth += item.Width;}if ((this.dSkinTabBar.Items.Count * (int)ItemMargin.Left + tempWidth) > this.dSkinTabBar.Width)this.dSkinScrollBar.Visible = true;elsethis.dSkinScrollBar.Visible = false;}#endregion#region 外部更改内部Item文本显示内容/// <summary>/// 外部更改内部Item文本显示内容/// </summary>/// <param name="text">需要显示的文本</param>/// <param name="key">当时传入的key值</param>public void SetItemText(string text, string key){foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.Tag.ToString() == key){item.Text = text;break;}}}#endregion#region 外部关闭选项卡/// <summary>/// 外部关闭选项卡/// </summary>/// <param name="key">传入对应的key</param>public void CloseCurrentItems(string key){try{if (this.dSkinTabControl.TabPages.Count > 0){foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.Tag.ToString() == key){dSkinTabBar.Items.Remove(item);dictTabContrils.Remove(item.Tag.ToString());dSkinTabControl.TabPages.RemoveByKey(item.Tag.ToString());if (dicControl.ContainsKey(key)){dicControl[key].Dispose();dicControl.Remove(key);}if (dicForm.ContainsKey(key)){dicForm[key].Dispose();dicForm.Remove(key);}break;}}IsShowScrollBar();}}catch (Exception) { }}#endregion#region 判断关闭是否开启提醒功能private bool _IsCloseingTips = false;/// <summary>/// 判断关闭是否开启提醒功能/// </summary>public bool IsCloseingTips{get { return _IsCloseingTips; }set { _IsCloseingTips = value; }}#endregion#region 委托文本public delegate void ClickDelegateHander(string str, string key); //声明一个委托public event ClickDelegateHander ClickEvent;//声明一个事件public delegate void ChangTageKeyDelegateHander(string tagkey); //声明一个委托public event ChangTageKeyDelegateHander ChangTageKey;//声明一个事件#endregion#region 返回当前标签页的Key/// <summary>/// 返回当前标签页的Key/// </summary>/// <returns></returns>public string ReturnKey(){string key = string.Empty;foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.BaseColor == _DownItemColor){key = item.Tag.ToString();break;}}return key;}#endregion#region 事件委托//定义委托public delegate void ClickHandle(object sender, EventArgs e);//定义事件public event ClickHandle UserControlClosing;#endregion#region 外部关内存所有的标签页/// <summary>/// 外部关内存所有的标签页/// </summary>public void CloseAllItems(){if (dSkinTabBar.Items.Count > 0)关闭所有的标签页ToolStripMenuItem_Click(null, null);}#endregion#region TabControlSelectedIndexChanged 将切换的key可以传出private void dSkinTabControl_SelectedIndexChanged(object sender, EventArgs e){if (ChangTageKey != null){if (dSkinTabBar.Items.Count > 0){ChangTageKey(dSkinTabControl.SelectedTab.Name);}}}#endregion#region 选择对应的标签页/// <summary>/// 选择对应的标签页/// </summary>/// <param name="key"></param>public void SelectTabPage(string key){if (this.dSkinTabControl.TabPages.ContainsKey(key))this.dSkinTabControl.SelectTab(key);foreach (DSkinTabItem item in dSkinTabBar.Items){if (item.Tag.ToString() != key)item.BaseColor = _NormalItemColor;elseitem.BaseColor = _DownItemColor;}}#endregion#region 计算Item的宽度 /// <summary>/// 计算显示框高度和宽度,英文字体和中文以及标点、数字的宽度各不相同,需计算/// </summary>/// <param name="mess">文本</param>/// <param name="width">宽度</param>private int CalcItemWidth(string mess, int width){int Linewidth; //显示对话内容容器的宽度和高度//临时建立一个容器装入内容RichTextBox canv_Rich = new RichTextBox();//先取全部Rtf的值canv_Rich.Rtf = mess;//再按照Txt判断文字//判断中文MatchCollection zh = Regex.Matches(canv_Rich.Text, @"[\u4e00-\u9fa5]", RegexOptions.IgnoreCase | RegexOptions.Singleline);//判断中文标点MatchCollection zhdot = Regex.Matches(canv_Rich.Text, @"[,。;?~!:‘“”’【】()]", RegexOptions.IgnoreCase | RegexOptions.Singleline);//判断数字MatchCollection en = Regex.Matches(canv_Rich.Text, @"[1234567890]", RegexOptions.IgnoreCase | RegexOptions.Singleline);//其余为英文,并计算总宽度Linewidth = (zh.Count + zhdot.Count) * 13 + en.Count * 8 + (canv_Rich.Text.Length - zh.Count - zhdot.Count - en.Count) * 7;//接收数据内容中是否包含图像int havePic = 0;havePic = Regex.Matches(canv_Rich.Rtf, "Paint.Picture").Count;//加上图像宽度Linewidth += havePic * 33;//判断极值//if (Linewidth > (12 * 13)) { Linewidth = 12 * 13; }if (Linewidth < width) { Linewidth = width; }return Linewidth;}#endregion#region 返回TabPage /// <summary>/// 返回TabPage/// </summary>/// <param name="key">对应的KEY</param>/// <returns></returns>public TabPage ReturnTabPage(string key){TabPage _TabPage = null;if (this.dSkinTabControl.TabPages.ContainsKey(key))_TabPage = this.dSkinTabControl.TabPages[key];return _TabPage;}#endregion}}

TabControlYd.Designer.cs完整代码如下:

namespace SCommon
{partial class TabControlYd{/// <summary> /// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary> /// 清理所有正在使用的资源。/// </summary>/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region 组件设计器生成的代码/// <summary> /// 设计器支持所需的方法 - 不要/// 使用代码编辑器修改此方法的内容。/// </summary>private void InitializeComponent(){this.components = new System.ComponentModel.Container();this.dSkinTabBar = new DSkin.Controls.DSkinTabBar();this.dSkinTabControl = new DSkin.Controls.DSkinTabControl();this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);this.关闭当前标签页ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();this.关闭所有的标签页ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();this.除此之外全部关闭ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();this.dSkinScrollBar = new DSkin.Controls.DSkinScrollBar();this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);this.richTextBox1 = new System.Windows.Forms.RichTextBox();this.contextMenuStrip.SuspendLayout();this.SuspendLayout();// // dSkinTabBar// this.dSkinTabBar.BackColor = System.Drawing.Color.SkyBlue;this.dSkinTabBar.BitmapCache = true;this.dSkinTabBar.Dock = System.Windows.Forms.DockStyle.Top;this.dSkinTabBar.EnabledLayoutContent = true;this.dSkinTabBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.dSkinTabBar.Location = new System.Drawing.Point(0, 0);this.dSkinTabBar.Name = "dSkinTabBar";this.dSkinTabBar.Orientation = System.Windows.Forms.Orientation.Horizontal;this.dSkinTabBar.Size = new System.Drawing.Size(611, 40);this.dSkinTabBar.TabControl = this.dSkinTabControl;this.dSkinTabBar.TabIndex = 1;this.dSkinTabBar.Text = "dSkinTabBar1";// // dSkinTabControl// this.dSkinTabControl.BitmapCache = false;this.dSkinTabControl.Dock = System.Windows.Forms.DockStyle.Fill;this.dSkinTabControl.HoverBackColors = new System.Drawing.Color[] {System.Drawing.Color.Transparent,System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))))};this.dSkinTabControl.ImgSize = new System.Drawing.Size(0, 0);this.dSkinTabControl.ItemBackgroundImage = null;this.dSkinTabControl.ItemBackgroundImageHover = null;this.dSkinTabControl.ItemBackgroundImageSelected = null;this.dSkinTabControl.ItemSize = new System.Drawing.Size(0, 1);this.dSkinTabControl.Location = new System.Drawing.Point(0, 52);this.dSkinTabControl.Name = "dSkinTabControl";this.dSkinTabControl.NormalBackColors = new System.Drawing.Color[] {System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))),System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))))};this.dSkinTabControl.PageImagePosition = DSkin.Controls.ePageImagePosition.Left;this.dSkinTabControl.SelectedBackColors = new System.Drawing.Color[] {System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))),System.Drawing.Color.FromArgb(((int)(((byte)(200)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))))};this.dSkinTabControl.Size = new System.Drawing.Size(611, 273);this.dSkinTabControl.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;this.dSkinTabControl.TabIndex = 2;this.dSkinTabControl.UpdownBtnArrowNormalColor = System.Drawing.Color.Black;this.dSkinTabControl.UpdownBtnArrowPressColor = System.Drawing.Color.Gray;this.dSkinTabControl.UpdownBtnBackColor = System.Drawing.Color.White;this.dSkinTabControl.UpdownBtnBorderColor = System.Drawing.Color.Black;this.dSkinTabControl.SelectedIndexChanged += new System.EventHandler(this.dSkinTabControl_SelectedIndexChanged);// // contextMenuStrip// this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {this.关闭当前标签页ToolStripMenuItem,this.关闭所有的标签页ToolStripMenuItem,this.除此之外全部关闭ToolStripMenuItem});this.contextMenuStrip.Name = "contextMenuStrip";this.contextMenuStrip.Size = new System.Drawing.Size(173, 70);// // 关闭当前标签页ToolStripMenuItem// this.关闭当前标签页ToolStripMenuItem.Name = "关闭当前标签页ToolStripMenuItem";this.关闭当前标签页ToolStripMenuItem.Size = new System.Drawing.Size(172, 22);this.关闭当前标签页ToolStripMenuItem.Text = "关闭当前标签页";this.关闭当前标签页ToolStripMenuItem.Click += new System.EventHandler(this.关闭当前标签页ToolStripMenuItem_Click);// // 关闭所有的标签页ToolStripMenuItem// this.关闭所有的标签页ToolStripMenuItem.Name = "关闭所有的标签页ToolStripMenuItem";this.关闭所有的标签页ToolStripMenuItem.Size = new System.Drawing.Size(172, 22);this.关闭所有的标签页ToolStripMenuItem.Text = "关闭所有的标签页";this.关闭所有的标签页ToolStripMenuItem.Click += new System.EventHandler(this.关闭所有的标签页ToolStripMenuItem_Click);// // 除此之外全部关闭ToolStripMenuItem// this.除此之外全部关闭ToolStripMenuItem.Name = "除此之外全部关闭ToolStripMenuItem";this.除此之外全部关闭ToolStripMenuItem.Size = new System.Drawing.Size(172, 22);this.除此之外全部关闭ToolStripMenuItem.Text = "除此之外全部关闭";this.除此之外全部关闭ToolStripMenuItem.Click += new System.EventHandler(this.除此之外全部关闭ToolStripMenuItem_Click);// // dSkinScrollBar// this.dSkinScrollBar.ArrowHeight = 12;this.dSkinScrollBar.ArrowHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))));this.dSkinScrollBar.ArrowNormalColor = System.Drawing.Color.Gray;this.dSkinScrollBar.ArrowPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));this.dSkinScrollBar.ArrowScrollBarGap = 3;this.dSkinScrollBar.Dock = System.Windows.Forms.DockStyle.Top;this.dSkinScrollBar.LargeChange = 1;this.dSkinScrollBar.Location = new System.Drawing.Point(0, 40);this.dSkinScrollBar.Maximum = 10;this.dSkinScrollBar.Minimum = 0;this.dSkinScrollBar.Name = "dSkinScrollBar";this.dSkinScrollBar.Orientation = System.Windows.Forms.Orientation.Horizontal;this.dSkinScrollBar.ScrollBarHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(158)))), ((int)(((byte)(158)))));this.dSkinScrollBar.ScrollBarHoverImage = null;this.dSkinScrollBar.ScrollBarLenght = 20;this.dSkinScrollBar.ScrollBarNormalColor = System.Drawing.Color.Gray;this.dSkinScrollBar.ScrollBarNormalImage = null;this.dSkinScrollBar.ScrollBarPadding = 1;this.dSkinScrollBar.ScrollBarPartitionWidth = new System.Windows.Forms.Padding(5);this.dSkinScrollBar.ScrollBarPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));this.dSkinScrollBar.ScrollBarPressImage = null;this.dSkinScrollBar.ShowArrow = true;this.dSkinScrollBar.Size = new System.Drawing.Size(611, 12);this.dSkinScrollBar.SmallChange = 1;this.dSkinScrollBar.TabIndex = 3;this.dSkinScrollBar.Text = "dSkinScrollBar";this.dSkinScrollBar.Value = 0;this.dSkinScrollBar.Visible = false;this.dSkinScrollBar.ValueChanged += new System.EventHandler(this.dSkinScrollBar_ValueChanged);// // richTextBox1// this.richTextBox1.Location = new System.Drawing.Point(234, 1);this.richTextBox1.Name = "richTextBox1";this.richTextBox1.Size = new System.Drawing.Size(191, 33);this.richTextBox1.TabIndex = 4;this.richTextBox1.Text = "";this.richTextBox1.Visible = false;// // TabControlYd// this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.BackColor = System.Drawing.Color.White;this.Controls.Add(this.richTextBox1);this.Controls.Add(this.dSkinTabControl);this.Controls.Add(this.dSkinScrollBar);this.Controls.Add(this.dSkinTabBar);this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.Name = "TabControlYd";this.Size = new System.Drawing.Size(611, 325);this.contextMenuStrip.ResumeLayout(false);this.ResumeLayout(false);}#endregionprivate System.Windows.Forms.ContextMenuStrip contextMenuStrip;private System.Windows.Forms.ToolStripMenuItem 关闭当前标签页ToolStripMenuItem;private System.Windows.Forms.ToolStripMenuItem 关闭所有的标签页ToolStripMenuItem;private System.Windows.Forms.ToolStripMenuItem 除此之外全部关闭ToolStripMenuItem;private DSkin.Controls.DSkinScrollBar dSkinScrollBar;private DSkin.Controls.DSkinTabBar dSkinTabBar;private DSkin.Controls.DSkinTabControl dSkinTabControl;private System.Windows.Forms.ToolTip toolTip1;private System.Windows.Forms.RichTextBox richTextBox1;}
}

我们创建好控件生成之后,直接拖拽到对应的页面就可以。委托事件调用方法为:

  this.tabControlYd1.ClickEvent += tabControlYd1_ClickEvent;this.tabControlYd1.ChangTageKey += tabControlYd1_ChangTageKey;






http://chatgpt.dhexx.cn/article/fPf9Aglq.shtml

相关文章

C# WPF TabControl控件用法详解

概述 TabControl我之前有讲过一节&#xff0c;内容详见&#xff1a; C# WPF TabControl用法指南(精品)&#xff0c;上节主要讲解了tabcontrol控件的左右翻页&#xff0c;以及页面筛选&#xff0c;以及数据绑定等内容&#xff0c;这节内容继续接续上节内容进行扩展讲解&#xff…

WPF 自定义控件TabControl

WPF 自定义控件TabControl 新TabControl效果&#xff1a; 新添加一个自定义控件ZTabControl&#xff1a; public class ZTabControl : TabControl{#region Private属性#endregion#region 依赖属性定义public static readonly DependencyProperty TypeProperty;#endregion#r…

Winform TabControl标签美化

前期工作&#xff1a; 加载资源文件&#xff0c;双击“Resources.resx" 类型选择Images 【添加资源】——【添加现有文件】 选择需要添加的图片文件&#xff0c;保存即可。 在下面的资源文件夹中即可看到添加的图片列表 **方法一&#xff1a;**重绘标签及背景 新建窗体…

WPF 自定义TabControl控件样式(转)

WPF 自定义TabControl控件样式 一、前言 程序中经常会用到TabControl控件&#xff0c;默认的控件样式很普通。而且样式或功能不一定符合我们的要求。比如&#xff1a;我们需要TabControl的标题能够居中、或平均分布&#xff1b;或者我们希望TabControl的标题能够进行关闭。要…

WPF TabControl 数据绑定

WPF TabControl in Binding’s world 首先&#xff0c;TabControl是间接继承自ItemControl的控件&#xff0c;因此可以像ItemControl那样自如的使用。 自此&#xff0c;我们知道了ItemControl的派生控件有&#xff1a; ItemControl–>Selector–>ListBox ItemControl…

WPF TabControl Styles

WPF TabControl Styles 水平使用的TabControl 效果&#xff1a; 样式资源 <!-- 顶部TabControl控件样式 --><SolidColorBrush x:Key"TabItem.Static.Background" Color"White"/><SolidColorBrush x:Key"TabItem.Static.Border&quo…

MFC tabcontrol切换界面

1.添加控件tabcontrol。 2.切换到资源界面->Dialog->插入Dialog&#xff0c;创建两个Dialog界面。 3.为新建的两个Dialog添加类&#xff0c;在新建的Dialog界面右键类向导添加对应的类。 4.添加TabSheet.cpp 和TabSheet.h 这两个文件从网上下载即可&#xff0c;具体源码如…

TabControl控件

点餐用到的控件&#xff1a; 1&#xff09;TabControl: 管理并向用户显示可以包含控件和组件的相关选项卡的信息 2&#xff09;ComboBox: 显示一个可编辑的文本框&#xff0c;其中包含一个允许值下拉列表 3&#xff09;DateTimePicker: 允许用户设定日期和时间&#x…

WPF 控件专题 TabControl控件详解

1、TabControl 介绍 TabControl 表示包含多个项的控件&#xff0c;这些项共享屏幕上的同一空间&#xff0c;每个区域都可以通过单击通常位于控件顶部的选项卡标题来访问。 也叫选项卡控件。 *******************************************************************************…

WPF 基础控件之 TabControl样式

其他基础控件 1.Window2.Button3.CheckBox4.ComboBox5.DataGrid 6.DatePicker7.Expander8.GroupBox9.ListBox10.ListView11.Menu12.PasswordBox13.TextBox14.RadioButton15.ToggleButton16.Slider 17.TreeView TabControl 实现下面的效果 1&#xff09;TabControl来实现动画&…

WPF TabControl美化

实现效果 XMAL样式 <Window.Resources><!-- TabItem的样式 --><Style TargetType"{x:Type TabItem}"><Setter Property"Template"><Setter.Value><ControlTemplate TargetType"{x:Type TabItem}"><Gr…

WPF动态加载TabControl

主要讲一下如何通过点击菜单&#xff0c;实现动态加载TabControl的功能&#xff0c;准确来说应该是动态加载TabItem,要实现这个功能&#xff0c;我们需要解决两个问题&#xff1a; 点击菜单的时候&#xff0c;需要传进来一个你要加载的UserControl控件的名称&#xff0c;让程序…

C# TabControl

C# TabControl 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#xff0c;除了标…

TabControl

jquery主体&#xff1a; var TabControl function (ops) {this._ops {items: ops.items || [],hashItems: {},selectedIndex: ops.selectedIndex || 0};this._element $(ops.element);this._tabContainerId "ui-tabcontrol-container-";this._convertHashItems()…

WinForm TabControl美化

一、简述 TabControl控件是winform里非常常用的一个控件&#xff0c;但是默认的tab控件的标签页和文字颜色都是无法修改的。有时候我们会要用到竖排列的标签页&#xff0c;或者想要更改标签页的背景颜色和字体时&#xff0c;自带的TabControl就满足不了我们的需求了&#xff0…

MFC中选项卡TabControl控件的用法

前言&#xff1a;我这里的开发环境是VS2010&#xff0c;其它不同的开发环境可能会有所差别&#xff0c;但绝不会差太多&#xff0c;其根本方法一般是不会变的。 选项卡控件(英文名&#xff1a;TabControl),这个控件使用在开发一些比较复杂&#xff0c;和用户交互性比较多的软件…

C#中TabControl相关用法

最近在用C#做项目时&#xff0c;用到TabControl这个控件&#xff0c;将学到的东西做个总结&#xff1a; 一、拖一个TabControl控件到窗口上&#xff0c;在控件上点击右键&#xff0c;可以添加选项卡/删除选项卡&#xff1b;或者在属性中找到TabPages,点击进去&#xff0c;可以看…

【Wayland】Weston启动流程分析

Weston启动流程分析 Weston是Wayland Compositor的实现。其Server端作为独立的进程运行在系统中。MakeFile中编译成果为&#xff0c;“weston”的可执行程序MakeFile.am(weston 2.0.0) bin_PROGRAMS westonweston_LDFLAGS -export-dynamic weston_CPPFLAGS $(AM_CPPFLAGS)…

Weston 纹理倒置(render-gl)

纹理倒置 背景 在 render-gl 接入 frame buffer object 实现 off-screen 渲染后,发现得到的渲染图发生了180的倒置. 查阅了有关资料后,在 eglspec.1.5 中的 2.2.2.1 Native Surface Coordinate Systems 找到了答案: The coordinate system for native windows and pixmaps …

【Wayland】Wayland简介与定制指导

Wayland与Weston简介 由于某些原因。移植并定制一套基于Wayland的Compositor。Wayland与Weston&#xff0c;是两个相辅相成的概念。这里简单总结一下&#xff1a; wayland是一套为“显示”服务的协议&#xff0c;基于C/S结构。它定制了一套标准的接口、基本通信方式。wayland…