- 浏览: 1064839 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
在TabControl控件中并没提供单个选项卡的Click事件,今天下午翻了翻MSDN 结果还是没找到相关的文档:( 看来只有自个儿折腾了...
还好有个SelectedIndexChanged事件为我所用:)
以下是代码片段:
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{
switch(this.tabControl1.SelectedIndex)
{
case 0:
MessageBox.Show("tabPage1 is Selected");
break;
case 1:
MessageBox.Show("tabPage2 is Selected");
break;
}
}
在 WinForm开 发的过程中,MDI是一种常见的形式。在MDI主窗体打开的子窗体处于活动状态的只有一个,很多时候我们需要在打开的MDI子窗 体中切换。然而.Net的框架并没有提供一种易见的切换方式,当然可以通过“Ctrl+Tab”来切换,但是这种方式是不易见的,并且只能按照打开窗体的 顺序来切换。
下面来介绍一种结合了TabCotrol控件的软件设计形式。
这种设计形式要解决三个问题:
(1)TabControl的TabPage要和窗体对应
(2)TabControl的TabPage切换的时候,对应的窗体要激活
(3)窗体的新建或关闭,对应的TabPage要创建或撤销
下面就来一步步的解决这些问题
首先拖一个TabControl控件到MDI主窗口中,设置其DOCK为Bottom或者TOP,根据需要也可以设置到左或右。设置其Height为0。主窗体添加如下代码:
//切换TabPage,将对应的窗体激活
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.MdiChildren.Length > 0)
{
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.tabControl.SelectedIndex == i)
{
this.MdiChildren[i].Activate();
return;
}
}
}
}
or
//切换TabPage,将对应的窗体激活
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
this.ChangeTabPage();
}
//子窗体切换激活
private void ChangeTabPage()
{
if (this.MdiChildren.Length > 0 && tabControl.SelectedIndex > -1)
{
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.tabControl.SelectedIndex == i)
{
this.MdiChildren[i].WindowState = FormWindowState.Maximized;
this.MdiChildren[i].Visible = true;
this.MdiChildren[i].Activate();
}
else if (this.MdiChildren[i].Visible == true)
{
this.MdiChildren[i].Visible = false;
}
}
}
}
//增加TabPage,将对应的窗体激活
private void tabControl_ControlAdded(object sender, ControlEventArgs e)
{
if (this.tabControl.SelectedIndex == 0)
this.ChangeTabPage();
}
//关闭TabPage,将对应的窗体关闭
private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
{
//if (this.tabControl.SelectedIndex == 0)
//this.ChangeTabPage();
}
//窗体关闭的时候,撤销对应的TabPage
public void RemoveTabPage(TabPage tb)
{
this.MultiPageControl.TabPages.Remove(tb);
if (this.tabControl.TabPages.Count == 0)
{
this.TabControlSize = new Size(this.TabControlSize.Width, 0);
}
}
//窗体创建的时候,创建对应的TabPage
public void AddTabPage(TabPage tb)
{
if (this.tabControl.TabPages.Count == 0)
{
this.TabControlSize = new Size(this.TabControlSize.Width, 20);
}
this.MultiPageControl.TabPages.Add(tb);
this.MultiPageControl.SelectedTab = tb;
}
//获取TabControl控件,以便子窗体调用(只读)
public TabControl MultiPageControl
{
get
{
return this.tabControl;
}
}
//获取TabControl控件的Size属性,以便子窗体调用
public Size TabControlSize
{
get
{
return this.tabControl.Size;
}
set
{
this.tabControl.Size = value;
}
}
对应子窗体,每个窗体打开的时候,主窗体都需要创建一个TabPage,关闭的时候,都要撤销一个TabPage,也就是说所有的子窗体都有共同的属性和功能,所以我设置了一个父窗体来实现这些功能,子窗体通过继承而拥有这些功能。
private frmMain frMain = null;
private TabPage tabPage = new TabPage();
private void frmTabMain_ParentChanged(object sender, EventArgs e)
{
if (this.MdiParent != null)
{
this.tabPage.Text = this.Text + " ";
frMain = this.MdiParent as frmMain;//获取主窗体
frMain.AddTabPage(tabPage);//调用主窗体方法,创建一个TabPage
}
}
//窗体被激活,对应的TabPage也呈选中状态
private void frmTabMain_Enter(object sender, EventArgs e)
{
if (this.frMain != null)
{
for (int i = 0; i < this.frMain.MdiChildren.Length; i++)
{
if (this.frMain.MdiChildren[i] == this)
{
this.frMain.MultiPageControl.SelectedIndex = i;
}
}
}
}
//窗体关闭,调用主窗体方法,撤销对应TabPage
private void frmTabTitleMain_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
this.frMain.RemoveTabPage(tabPage);
}
//窗体加载的时候,将窗体的标题赋给对应的TabPage
private void frmTabMain_Load(object sender, EventArgs e)
{
// this.tabPage.Text = this.Text;
}
--------------------------------------------------------------------------------------------------------------
本页面实现功能为:点击左侧边栏的菜单 页面部分TabControl自动添加所对应的页面
/// </summary>
/// <param name="MainTabControlKey">选项卡的键值</param>
/// <param name="objTabControl">要添加到的TabControl对象</param>
/// <returns></returns>
private Boolean ErgodicModiForm(string MainTabControlKey, TabControl objTabControl)
{
//遍历选项卡判断是否存在该子窗体
foreach (Control con in objTabControl.Controls)
{
tbPage = (TabPage)con;
if (tbPage.Name == MainTabControlKey)
{
return false;//存在
}
}
return true;//不存在
}
private TabPage tbPage = null;
/// <summary>
/// 添加选项卡页面显示窗体信息
/// </summary>
/// <param name="id">选项卡id</param>
/// <param name="name">选项卡名称</param>
/// <param name="newForm">所要加载的窗体</param>
private void AddTab(string id, string name, Form newForm)
{
if (ErgodicModiForm(id, tbcMain))
{
tbPage = new TabPage();
tbPage.Name = id;
tbPage.Text = name;
tbcMain.TabPages.Add(tbPage);
tbcMain.BackColor = Color.FromName("#3775B2");
//newForm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right |
AnchorStyles.Bottom;
newForm.Dock = DockStyle.Fill;
newForm.BackColor = ColorTranslator.FromHtml("#e3f1fe");
newForm.FormBorderStyle = FormBorderStyle.None;
newForm.TopLevel = false;
//添加右键菜单
contextMenu = new ContextMenuStrip(this.components);
//contextMenu.TopLevel = false;
contextMenu.Items.Add("关闭窗口");
//this.Controls.Add(contextMenu);
contextMenu.Items[0].Click += new System.EventHandler(this.contextMenuItem_Click);
newForm.Show();
tbPage.Controls.Add(newForm);
newForm.ContextMenuStrip = contextMenu; //指定窗体的右键菜单
}
tbcMain.SelectedTabPage = tbPage;
}
/// <summary>
/// 右键菜单单击关闭窗体,关闭当前选项卡页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void contextMenuItem_Click(object sender, EventArgs e)
{
foreach (Control i in this.tbcMain.SelectedTab.Controls)
{
if (i.GetType() == typeof(Form))
{
Form form = (Form)i;
form.Close();
}
}
this.tbcMain.TabPages.RemoveAt(this.tbcMain.SelectedIndex);
}
/// <summary>
/// 点击操作员管理菜单,加载操作员管理页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tsmiOperManage_Click(object sender, EventArgs e)
{
User_Mange userMange=new User_Mange();
AddTab("OperManage","操作员管理",userMange);
}
发表评论
-
C# WinForm程序如何与js交互
2012-07-15 22:28 2316一、建立网页 <html ... -
SQLITE FOR .NET4.0使用说明以及DLL
2012-06-28 22:07 1197SQLITE FOR .NET4.0使用说明以及DLL -
C# 通过字符串动态创建一个窗体
2012-06-27 20:27 1724private void button1_Click(obje ... -
vs2010 打包winform成EXE文件
2012-04-20 14:03 1623见附件 -
C#中DataGridView控件60招
2012-01-13 09:36 65471. DataGridView当前的单元格属性取得、变更 2 ... -
单击dataGridView某一行时将dataGridView当前选择行的某列值赋值给某个文本框
2012-01-13 09:19 2454SelectedRows和CurrentRow之间的区别 ... -
c# winform开发-datagridview开发
2012-01-13 09:18 1720datagridview 操作详解 目录: 1、 取得或 ... -
C# 中奇妙的函数. String Split 和 Join
2011-10-25 10:51 1102很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能 ... -
asp.net中web.config配置节点大全详解
2011-10-25 10:16 1367asp.net中web.config配置节点大全详解 2 ... -
Entity Framework in ASP.NET MVC Application (三)
2011-05-10 20:31 2463In the previous tutorial you im ... -
Entity Framework in ASP.NET MVC Application (二)
2011-05-10 20:29 1694In the previous tutorial you cr ... -
Entity Frame Work 4.1调用存储过程
2011-05-10 20:24 2112在这个问题上,琢磨了很久了。今天终于找到了调用的方法。 存储 ... -
entity-framework (code-first)实例开发(一)
2011-05-09 20:40 2748The Contoso University Web Appl ... -
使用ef4.1 的dbcontext进行数据库循环操作
2011-04-24 23:06 2259如果你想要调用一个类的方法进行循环操作:官方的例子: Dis ... -
使用EF 4.1的DbContext
2011-04-24 22:36 3636简述:EF4.1包括Code First和DbContext ... -
ADO.NET 访问存储过程
2011-04-24 22:15 1585ADO.NET 访问存储过程其实也比较简单,但是有些小细节部分 ... -
JAVA与.NET的相互调用——通过Web服务实现相互调用(附原代码)
2011-04-24 20:58 1283JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有 ... -
视图模式/视图->视图包
2011-04-24 20:16 1468ASP.NET MVC(自V1起)就支持一个带控制器和视图的V ... -
SkipRequestValidation] –> [AllowHtml]
2011-04-24 20:15 1432ASP.NET MVC内置了防止HTML和跨站脚本注入攻击的支 ... -
Log4net 详细说明
2011-04-12 22:29 2061在实际项目中我们经常 ...
相关推荐
在C# WinForm开发中,TabControl是一个常用的控件,它用于展示多个窗口或面板,让用户在不同的内容间切换。然而,系统默认的TabControl样式相对朴素,对于追求用户体验和界面美观的应用来说,可能需要进行一些定制化...
在C# WinForm开发中,TabControl是一个常用的控件,它允许用户通过不同的选项卡来组织和切换内容。然而,标准的TabControl在外观上可能显得较为简单,无法满足一些追求美观和个性化界面的需求。本篇文章将深入探讨...
在C# WinForm开发中,TabControl是一个常用的控件,它允许用户通过标签页来组织和切换不同的内容区域。然而,Windows默认的TabControl样式可能无法满足所有设计需求,特别是在需要个性化或者增强用户体验时。本篇...
在C# WinForm开发中,TabControl控件是一个非常常用且实用的组件,它允许我们将多个窗体或界面组织在一个统一的界面下,每个Tab页代表一个独立的功能区域。本教程将详细讲解如何实现TabControl的动态添加、删除和...
在Windows Forms(WinForm)开发中,`TabControl`是一个常用控件,用于展示多个页面或面板,每个页面或面板可以通过标签进行切换。然而,系统默认的`TabControl`样式较为简单,有时不能满足开发者对界面美观性的需求...
"控件重绘 C# WinForm控件美化扩展系列之TabControl"可能还包括了一些示例代码,如在压缩包中的两个RAR文件。通过学习和分析这些代码,开发者可以深入理解控件重绘的过程,并应用于自己的项目中,实现个性化和专业化...
在标题“自定义Winform控件TabControl,可同时存在左右tabpage”中,我们讨论的是一个经过定制的TabControl控件,它扩展了这一功能,使得标签页可以同时出现在左侧和右侧,为用户界面设计提供了更多灵活性。...
C# WinForm控件美化扩展系列之TabControl(续).rar C# WinForm控件美化扩展系列之TabControl(续).rar C# WinForm控件美化扩展系列之TabControl(续).rar
C#,Winform TabControl重写(添加关闭与添加按钮鼠标移动变色功能),可自定义添加按钮及样式
在C#编程中,TabControl控件是Windows Forms应用程序中常用的一种组件,用于展示多个相关的页面或窗体。这个“C#窗体TabControl控件美化版源代码”显然提供了一个定制的实现,它增强了标准TabControl控件的外观和...
在Windows Forms(Winform)开发中,TabControl是一个常用的控件,它允许用户通过标签页的形式展示多个相关的界面或数据。本教程将详细讲解如何在Winform应用中动态创建TabControl,并结合GridView实现数据的拖拽...
在C#中,我们通常会通过操作TabControl和TabPage的属性,或者自定义绘制(DrawItem事件)来实现样式更改。 1. **修改字体**:默认情况下,TabControl的字体是由系统的默认设置决定的。要改变字体,我们需要分别设置...
通过上述知识点,我们可以了解到在C# WinForm开发中,如何通过设置DrawMode属性、注册并处理DrawItem事件以及通过GDI+图形对象来实现TabControl控件背景颜色的自定义,从而达到界面美化的需要。
在C#编程中,TabControl控件是Windows Forms应用程序中常用的一种组件,用于展示多个标签页,每个标签页可以承载不同的内容。在某些情况下,我们可能需要为TabControl添加一个关闭功能,让用户能够根据需要关闭特定...
在Windows Forms(WinForm)开发中,`TabControl`控件是一个非常实用的组件,它可以用于组织和展示多个用户界面(UI)元素在一个统一的视图中。本篇将详细讲解如何利用`TabControl`来实现子窗口的切换,并为每个...
在C# WinForm开发中,有时我们需要创建一个用户界面,其中可以显示多个并行的视图或工作区,这时TabControl控件就派上用场了。TabControl允许我们在一个容器中组织多个窗体或者控件,每个标签页代表一个独立的工作...
C#TabControl 中标签居左显示重绘代码详解 在 C# 开发中,使用 TabControl 控件时,通常标签会默认居中或居右显示,而在某些情况下,我们需要将标签显示在左侧,以便于用户更好地浏览和操作。以下将详细介绍如何在 ...
在C#中,TabControl允许你添加、删除和操作TabPages,方便地组织和展示各种内容。 2. Window窗体: Window是.NET Framework中的一个类,通常用于创建独立的应用程序窗口。在WPF中,它是Window类;而在Windows Forms...
在C#中,TabControl控件是System.Windows.Forms命名空间的一部分,它默认提供了基本的标签页功能。然而,开发者往往需要对其进行自定义以满足特定的界面需求,比如改变标签页的样式、添加动画效果或者增强交互性。...
在C# WinForm开发中,用户界面交互是一个关键部分,其中单击(Click)和双击(DoubleClick)事件是常见的用户输入响应。然而,标题提到的一个常见问题是:在同一个控件上,C# WinForm不支持同时处理单击和双击事件。...