MagicLibrary.dll控件功能中昨天写了个Menu的实现,全部以代码方式实现的一个例子。
在MagicLibrary.dll中,还一TabControl控件。
今天以拖拉方式(工具方法拖出)实现TabControl,其中加有Menu例子。
例子源码下载:/Files/HD/MagicLibrary_Demo/TabControlDemo.rar
截图如下:
例图一:
![TabControlDemo_1.jpg](/images/cnblogs_com/hd/DemoOpus/TabControlDemo_1.jpg)
例图二:加入TabPage
![TabControlDemo_2.jpg](/images/cnblogs_com/hd/DemoOpus/TabControlDemo_2.jpg)
例图三:关才已选择的TabPage
![TabControlDemo_3.jpg](/images/cnblogs_com/hd/DemoOpus/TabControlDemo_3.jpg)
例图四:在已选择的TabControl中的RichTextBox控件右键菜单
![TabControlDemo_4.jpg](/images/cnblogs_com/hd/DemoOpus/TabControlDemo_4.jpg)
例图五:TabControl控件的PositionTop属性设为flase
![TabControlDemo_5.jpg](/images/cnblogs_com/hd/DemoOpus/TabControlDemo_5.jpg)
操作示例:
(界面设计)
项目中加入MagicLibrary.dll(包括解决方案资源管理器、工具箱中)。
项目中包括两个Form,分别为:Form1、Form2,Form1为起始Form。
打开Form1,在窗口设计器中从工具箱中拖入刚加入的控件:MenuControl,把MenuControl的Dock属性设为:Top,Name属性为:_topMenu,PositionTop属性设为:true,ShowArrows属性设为:true,ShowClose属性设为:true,ShrinkPagesToFit属性设为:false。接着再从工具箱中拖入:TabControl,把TabControl控件的Dock属性设为:Fill,Name属性为:_tabControl。
打开Form2,在窗口设计器中从工具箱中拖入控件:RichTextBox,把RichTextBox的Dock属性设为:Fill,Name属性设为:rtxContent
一:Form1
(代码实现)
打开Form1的代码设计器,在Form1的构造函数中加入:this.SetupMenu();
见源码:
public
Form1()
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//加入菜单
this.SetupMenu();
}
接着复制这段代码到设计器中:
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**/
/// <summary>
/// 加入下拉菜单
/// </summary>
protected
void
SetupMenu()
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
Crownwood.Magic.Menus.MenuCommand top1 = new Crownwood.Magic.Menus.MenuCommand( "&PageControls" );
Crownwood.Magic.Menus.MenuCommand top1_1 = new Crownwood.Magic.Menus.MenuCommand( "&AddPage",new EventHandler( OnAddPageSelected ) );
Crownwood.Magic.Menus.MenuCommand top1_2 = new Crownwood.Magic.Menus.MenuCommand( "&RemovePage",new EventHandler( OnColseSelected ) );
Crownwood.Magic.Menus.MenuCommand top1_3 = new Crownwood.Magic.Menus.MenuCommand( "&Exit",new EventHandler( OnExitSelected ) );
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
top1.MenuCommands.AddRange( new Crownwood.Magic.Menus.MenuCommand[]
{ top1_1,top1_2,top1_3 } );
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
Crownwood.Magic.Menus.MenuCommand top2 = new Crownwood.Magic.Menus.MenuCommand( "&TabControl" );
Crownwood.Magic.Menus.MenuCommand top2_1 = new Crownwood.Magic.Menus.MenuCommand( "&Top",new EventHandler( OnTopSelected ) );
Crownwood.Magic.Menus.MenuCommand top2_2 = new Crownwood.Magic.Menus.MenuCommand( "&Buttom",new EventHandler( OnButtomSelected ) );
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
top2.MenuCommands.AddRange( new Crownwood.Magic.Menus.MenuCommand[]
{ top2_1,top2_2 } );
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
this._topMenu.MenuCommands.AddRange( new Crownwood.Magic.Menus.MenuCommand[]
{ top1,top2 } );
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
this._tabControl.MouseUp += new MouseEventHandler( OnMouseUpTabPage );
}
![None.gif](/Images/OutliningIndicators/None.gif)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**/
/// <summary>
/// 加入页面
/// </summary>
protected
void
AddPage()
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
Form2 f2 = new Form2();
System.Windows.Forms.Control ctlForm = f2;
Crownwood.Magic.Controls.TabPage tp = new Crownwood.Magic.Controls.TabPage( "Page"+this._tabControl.TabPages.Count.ToString(),ctlForm );
this._tabControl.TabPages.Add( tp ).Selected = true;
}
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
protected
void
OnExitSelected(
object
sender , EventArgs e )
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
DialogResult dr = MessageBox.Show( "Are you sure exit application?","Warning",MessageBoxButtons.YesNo,MessageBoxIcon.Warning );
if ( dr == DialogResult.Yes )
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Application.Exit();
}
}
![None.gif](/Images/OutliningIndicators/None.gif)
protected
void
OnTopSelected(
object
sender,EventArgs e )
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this._tabControl.PositionTop = true;
}
![None.gif](/Images/OutliningIndicators/None.gif)
protected
void
OnButtomSelected(
object
sender , EventArgs e )
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this._tabControl.PositionTop = false;
}
![None.gif](/Images/OutliningIndicators/None.gif)
protected
void
OnAddPageSelected(
object
sender , EventArgs e )
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.AddPage();
}
![None.gif](/Images/OutliningIndicators/None.gif)
protected
void
OnMouseUpTabPage(
object
sender , System.Windows.Forms.MouseEventArgs e )
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if ( this._tabControl.TabPages.Count>0 && e.Button == MouseButtons.Right && this._tabControl.SelectedTab.Selected )
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Crownwood.Magic.Menus.MenuControl muMenu = new Crownwood.Magic.Menus.MenuControl();
Crownwood.Magic.Menus.MenuCommand menu1 = new Crownwood.Magic.Menus.MenuCommand( "&SavePage" );
Crownwood.Magic.Menus.MenuCommand menu2 = new Crownwood.Magic.Menus.MenuCommand( "&Close",new EventHandler( OnColseSelected ) );
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
Crownwood.Magic.Menus.PopupMenu pm = new Crownwood.Magic.Menus.PopupMenu();
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
pm.MenuCommands.AddRange( new Crownwood.Magic.Menus.MenuCommand[]
{ menu1,menu2 } );
pm.TrackPopup( this._tabControl.PointToScreen( new Point( e.X,e.Y ) ) );
}
}
![None.gif](/Images/OutliningIndicators/None.gif)
protected
void
OnColseSelected(
object
sender , EventArgs e )
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if ( this._tabControl.TabPages.Count > 0 )
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this._tabControl.TabPages.Remove( this._tabControl.SelectedTab );
}
}
(添加事件)
打开Form1窗口设计器,选中TabControl控件,向控件加入MouseUp事件:
/**/
/// <summary>
/// 单击TabControl关闭按钮时关闭已选择的TabPage
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private
void
_tabControl_ClosePressed(
object
sender, System.EventArgs e)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if ( this._tabControl.TabPages.Count > 0 )
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this._tabControl.TabPages.Remove( this._tabControl.SelectedTab );
}
}
二:Form2
打开Form2窗口设计器,选中RichTextBox,为RichTextBox控件添加MouseUp事件:
private
void
rtxContent_MouseUp(
object
sender, System.Windows.Forms.MouseEventArgs e)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if ( e.Button == MouseButtons.Right )
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
System.Windows.Forms.RichTextBox rt = ( RichTextBox )sender;
Crownwood.Magic.Menus.MenuControl muMenu = new Crownwood.Magic.Menus.MenuControl();
Crownwood.Magic.Menus.MenuCommand menu1 = new Crownwood.Magic.Menus.MenuCommand( "&Copy" );
Crownwood.Magic.Menus.MenuCommand menu2 = new Crownwood.Magic.Menus.MenuCommand( "&Cut" );
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
Crownwood.Magic.Menus.PopupMenu pm = new Crownwood.Magic.Menus.PopupMenu();
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
pm.MenuCommands.AddRange( new Crownwood.Magic.Menus.MenuCommand[]
{ menu1,menu2 } );
pm.TrackPopup( rt.PointToScreen( new Point( e.X,e.Y ) ) );
}
}