拆分器SplitContainer控件

原文:http://blog.csdn.net/warmspace2008/archive/2009/02/24/3934040.aspx

拆分器控件Splitcontainer ,是一个含有Splitter拆分条的容器,它包含两个面板容器Panel1,Panel2,可以移动拆分条,对面板大小进行控制!

控件学习示例程序!

属性介绍;

//拆分条的是否启用禁用
bool IsSplitterFixed{get;set;}
bool类型,true:不能调节拆分条; false :能够使用拆分条.
决定是否可以通过键盘或鼠标来移动拆分器。

//拆分器的方向;垂直和水平方向上拆分控件,上下和左右两块面板
Orientation Orientation{get;set;}
Orientation是枚举;包含两个值;水平与垂直; Vertical ; Horizontal ;

//获取拆分条(器)的大小
Rectangle SplitterRectangle{get;}
取得拆分条的矩形表示形式;new Rectangle(X,Y width,height)拆分器就是指拆分条,坐标点,宽高
拆分条,是一个矩形表示的!
该属性的变化,与Orientation属性相关!垂直,水平显示状态,拆分条的位置大小当然不同!

//指定拆分器面板之一保持不变
调节拆分器,使用panel1或panel2面板不会改变大小;
FixedPanel FixedPanel{get;set;}
FixedPanel枚举: 有三个值;None(默认值), Panel1 ,Panel2;
确定调整SplitterContainer控件后,哪个面板将保持不变!调整拆器容器大小时,可以保持哪个面板不变时,
才设置此属性,如果容器不会改变,也不用设置此属性!

//设置拆分器离容器的初始大小,拆分条左或上边缘离容器的初始宽度。
int SplitterDistance{get;set;}
像素为单位,默认值为40 ,在移动拆分器时,这个值是变化的,计算左边缘或上边缘的距离!
拆分器的初始距离.

//设置拖动拆分条(器)移动的增量大小,
也就是拖移的速度!同样的拖动,移动的宽度可不相同。
int SplitterIncrement{get;set;}
获取设置拆分条移动的增量,默认值为1;
测试SplitterIncrement属性值的大小,可以通接受键盘上下键的,调节拆分器,IsSplitterFixed必须为true

//设置拆分条的宽度
int SplitterWidth{get;set;}
默认值为4 ,通过设置可以更改此值,使拆分条的宽度变粗!

// 获取设置拆分器与panel1的左边缘,或上边缘的距离固定大小 ;与边缘的默认大小为25
int Panel1MinSize{get;set;}
int Panel2MinSize{get;set;}
此属性作用比较大,可控制拆分器的活动范围大小,也就是左右面板中固定的大小面积,拆分器不能
进行拖放进入的区域。
把该属性设置为0;表示拆分器可以到过缘。

//设置拆分器的Panel1 Panel2折叠或展开;
bool Panel1Collapsed{get;set;}
bool Panel2Collapsed{get;set;}

注意:Panel1Collapsed属性,true为拆叠,false展开为默认值,
在拆叠状态下,不能设置SplitterDistance,SplitterWidth属性,这时的拆分器处了隐藏关闭状态,
必须在展开时才能设置这些属性!

//Pane1 与Pane2属性 拆分器的两个面板容器
SplitterPanel Panel1{get}
SplitterPanel Panel2{get;}
SplitterPanel:Panel类型

此属性设置如果与SplitterDistance属性冲突,拆分条的初始位置会以此属性为准进行定位!

事件介绍:
1:SplitterMoving事件
拆分器移动时发生;拆分条移动过程中发生!
委托类型;SplitterCancelEventHandler
数据类型为:SplitterCancelEventArgs :CancelEventArgs
数据成员为:

SplitX,SplitY,MouseCursorX,MouseCursorY,表示在工作区,鼠标指针,拆分条的坐标值。

SplitX SplitY X坐标点指的是拆分器与容器距离,垂直Y为0

MouseCursorX MouseCursorY 表示鼠标指针在工作的位置点坐标

2: SplitterMoved事件

拆分器移动后发生;
委托类型;SplitterEventHandler
数据类型;SplitterEventArgs :EventArgs
数据成员;SplitX,SplitY,X,Y 表示在工作区,鼠标指针,拆分条的坐标值,这都是移动后的位置值!

Moving事件是指,鼠标按住拆分器,不放,进行移动时,发生,只要拆分器移动就会发生,不移则事件不会发生!
Moved事件是指,移动拆分器之后,释放鼠标时,发生的!它是Moving事件之后发生!

小结:

控件的Dock属性如果设置成Fill,窗体的单击事件,不会被触发;因为控件遮挡住了!

view plaincopy to clipboardprint?
using System;  
using Cshcn;  
using System.Drawing;  
using System.ComponentModel;  
using System.Windows.Forms;  
using System.Threading;  
 
namespace Cshcn  
{     
   class Program  
    {  
          
    [STAThread]  
        static void Main()  
        {     
            Application.EnableVisualStyles();  
            Application.SetCompatibleTextRenderingDefault(false);  
            Application.Run(new Form1());  
 
        }  
    }  
 
    public class Form1:Form  
    {    
         
       private SplitContainer splitContainer1;  
       private SplitContainer splitContainer2;  
       private Button buttonSplitterFixed;  
       private Button buttonOrientation;  
       private Label labelPanelCollapsed;  
       private Button buttonSplitterWidth;  
 
       private bool IsCollapsed=true;  
       private bool IsVer=true;  
       private bool IsSplitFixed=false;  
       private ToolTip toolTip;  
 
       public Form1()  
        {  
             InitializeComponent();  
        }  
 
       public void InitializeComponent()  
        {    
           this.splitContainer1=new SplitContainer();  
           this.splitContainer2=new SplitContainer();  
           this.buttonSplitterFixed=new Button();  
           this.buttonOrientation=new Button();  
           this.labelPanelCollapsed=new Label();  
           this.buttonSplitterWidth=new Button();  
 
           this.toolTip=new ToolTip();  
 
           this.splitContainer2.SuspendLayout();  
           this.splitContainer1.SuspendLayout();  
           this.SuspendLayout();  
 
           this.splitContainer1.Location=new Point(10,10);  
           this.splitContainer1.Size=new Size(480,420);  
           this.splitContainer1.BorderStyle=BorderStyle.Fixed3D;  
           this.splitContainer1.FixedPanel=FixedPanel.Panel1;  
           this.splitContainer1.SplitterDistance=100;  
           this.splitContainer1.Panel1MinSize=0;  
           this.splitContainer1.SplitterWidth=4;  
           this.splitContainer1.SplitterMoving+=new SplitterCancelEventHandler(this.splitContainer1_Moving);  
           this.splitContainer1.SplitterMoved+=new SplitterEventHandler(this.splitContainer1_Moved);  
 
           this.splitContainer2.BackColor=SystemColors.Control;  
           this.splitContainer2.Dock=DockStyle.Fill;  
           this.splitContainer2.BorderStyle=BorderStyle.Fixed3D;  
           this.splitContainer2.SplitterWidth=4;  
           this.splitContainer2.SplitterIncrement=6;  
           this.splitContainer2.Orientation=Orientation.Horizontal;  
           this.splitContainer2.Panel2MinSize=100;  
           this.splitContainer2.SplitterMoving+=new SplitterCancelEventHandler(this.splitContainer2_Moving);  
           this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);  
 
           this.labelPanelCollapsed.Location=new Point(508,20);  
           this.labelPanelCollapsed.Size=new Size(35,35);  
           this.labelPanelCollapsed.BackColor=Color.YellowGreen;  
           this.labelPanelCollapsed.AutoSize=false;  
           this.labelPanelCollapsed.MouseEnter+=new EventHandler(this.labelPanelCollapsed_MouseEnter);  
           this.labelPanelCollapsed.MouseLeave+=new EventHandler(this.labelPanelCollapsed_MouseLeave);  
           this.labelPanelCollapsed.Click+=new EventHandler(this.labelPanelCollapsed_Click);  
 
           this.buttonSplitterFixed.Text="锁定拆分条";  
           this.buttonSplitterFixed.Location=new Point(508,70);  
           this.buttonSplitterFixed.Click+=new EventHandler(this.buttonSplitterFixed_Click);  
             
           this.buttonOrientation.Text="垂直/水平";  
           this.buttonOrientation.Location=new Point(508,110);  
           this.buttonOrientation.Click+=new EventHandler(this.buttonOrientation_Click);  
 
           this.buttonSplitterWidth.Text="拆分条宽度";  
           this.buttonSplitterWidth.Location=new Point(508,150);  
           this.buttonSplitterWidth.Click+=new EventHandler(this.buttonSplitterWidth_Click);  
           this.buttonSplitterWidth.MouseMove+=new MouseEventHandler(this.buttonSplitterWidth_MouseMove);  
           this.buttonSplitterWidth.MouseLeave+=new EventHandler(this.buttonSplitterWidth_MouseLeave);  
 
            
           this.Text="拆分器_SplitContainer";  
           this.ClientSize=new Size(600,440);  
           this.StartPosition=FormStartPosition.CenterScreen;  
           this.MaximizeBox=false;  
           this.Controls.AddRange(new Control[]{this.splitContainer1,this.buttonSplitterFixed, this.labelPanelCollapsed,this.buttonOrientation,this.buttonSplitterWidth});   
            
           this.splitContainer2.ResumeLayout(false);  
           this.splitContainer1.ResumeLayout(false);  
           this.ResumeLayout(false);  
        } 
        private void buttonSplitterWidth_Click(object sender,EventArgs e)  
        {  
              splitContainer1.SplitterWidth+=4;  
        }  
        private void buttonSplitterWidth_MouseMove(object sender,MouseEventArgs e)  
        {  
             Button btn=(Button)sender;  
             toolTip.SetToolTip(btn,"Width= "+SplitterWidth);   
        }  
        private void buttonSplitterWidth_MouseLeave(object sender,EventArgs e)  
        {  
             splitContainer1.SplitterWidth=4;  
        }  
        private string SplitterWidth  
        {     
            get{return splitContainer1.SplitterWidth.ToString();}  
        }  
        private void buttonSplitterFixed_Click(object sender,EventArgs e)  
        {  
            if(!IsSplitFixed)  
            {  
                 splitContainer1.IsSplitterFixed=true;  
                 IsSplitFixed=true;  
            }  
            else 
            {  
                 splitContainer1.IsSplitterFixed=false;  
                 IsSplitFixed=false;   
            }  
        }   
        private void labelPanelCollapsed_MouseEnter(object sender,EventArgs e)  
        {  
             for(int i=0;i<10;i++)  
             {  
                 Thread.Sleep(8);  
                 splitContainer1.SplitterDistance+=20;  
             }   
             labelPanelCollapsed.BackColor=Color.Brown;  
        }  
        private void labelPanelCollapsed_MouseLeave(object sender,EventArgs e)  
        {  
            for(int i=0;i<10;i++)  
            {  
                Thread.Sleep(8);  
                splitContainer1.SplitterDistance-=20;  
            }   
            labelPanelCollapsed.BackColor=Color.YellowGreen;  
            Label label=(Label)sender;  
            toolTip.SetToolTip(label,"Click:展开/折叠");  
        }

private void labelPanelCollapsed_Click(object sedner, EventArgs e)  
        {  
             if(IsCollapsed)  
              {  
                 splitContainer1.Panel1Collapsed=true;  
                 IsCollapsed=false;  
              }
             else 
              {  
                 splitContainer1.Panel1Collapsed=false;  
                 IsCollapsed=true;  
              }
              labelPanelCollapsed.BackColor=Color.YellowGreen;   
        }

private void buttonOrientation_Click(object sedner, EventArgs e)  
        {  
             if(IsVer)
              {  
                 splitContainer1.Orientation=Orientation.Horizontal;  
                 IsVer=false;  
              }
             else 
              {  
                 splitContainer1.Orientation=Orientation.Vertical;  
                 IsVer=true;  
              }
        }

private void splitContainer1_Moving(object sender,SplitterCancelEventArgs e)  
        {    
            Cursor.Current=Cursors.VSplit;   
            SplitContainer splitter=(SplitContainer)sender;  
            toolTip.SetToolTip(splitter,  
                               "SplitX= "+e.SplitX+  
                               "\nSplitY= "+e.SplitY+  
                               "\nMouseCursorX= "+e.MouseCursorX+  
                               "\nMouseCursorY= "+e.MouseCursorY);           
        }

private void splitContainer1_Moved(object sender,SplitterEventArgs e)  
        {  
            SplitContainer splitter=(SplitContainer)sender;  
            toolTip.SetToolTip(splitter,  
                               "SplitX= "+e.SplitX+  
                               "\nSplitY= "+e.SplitY+  
                               "\n X= "+e.X+  
                               "\n Y= "+e.Y);      
        }
        private void splitContainer2_Moving(object sender ,SplitterCancelEventArgs    e)  
        {
            Cursor.Current=Cursors.HSplit;
        }

private System.ComponentModel.IContainer components = null;  
       protected override void Dispose(bool disposing)  
        {  
            if (disposing && (components != null))  
            {
                components.Dispose();  
            }
            base.Dispose(disposing);  
        }
    }  
}

posted on 2009-11-18 14:23 彬子 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/wangzb/archive/2009/11/18/1605352.html

拆分器SplitContainer控件相关推荐

  1. (转)SplitContainer 控件(Windows 窗体)

    1.可以将 Windows 窗体 SplitContainer 控件看作是一个复合体,它是由一个可移动的拆分条分隔的两个面板.当鼠标指针悬停在该拆分条上时,指针将相应地改变形状以显示该拆分条是可移动的 ...

  2. C#实现在Form1的SplitContainer控件中Form2的按钮打开Form3

    C#实现在Form1的SplitContainer控件中Form2的按钮打开Form3 问题描述 解决方法 问题描述 C#实现在Form1的SplitContainer控件中Form2的按钮打开For ...

  3. NET- SplitContainer控件说明

    拆分器控件Splitcontainer ,是一个含有Splitter拆分条的容器,它包含两个面板容器Panel1,Panel2,可以移动拆分条,对面板大小进行控制! 控件学习示例程序! 属性介绍; / ...

  4. 模型设计器工具控件LinqConnect

    2019独角兽企业重金招聘Python工程师标准>>> LinqConnect模型设计器控件是一款快速且方便的ORM解决方案,开发和 Microsoft LINQ to SQL技术相 ...

  5. android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法

    44_在线视频播放器 ------------------------- 1.注意这里,在模拟器中,android2.2和android2.1视频是没有播放效果的,这个主要是因为模拟器的原因和程序代码 ...

  6. 播放视频android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法...

    最近用使开辟的过程中涌现了一个小题问,顺便录记一下因原和法方--播放视频 44_在线视频播放器 ------------------------- 1.注意这里,在模拟器中,android2.2和an ...

  7. 页面嵌入 微软播放器-播放控件

    无图像的media播放器 <object id=nstv classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6              widt ...

  8. C#中设计器的控件事件转到逻辑代码

    这个其实很简单.只是不知道的时候觉得有点难: 就拿输入框textBox入手吧: 1.先找到textBox的解决方案资源管理器: 2.然后找到事件管理器 3.最后找到你想找的事件双击.

  9. Android拨号器---熟练控件与布局的应用

    Android版的简易拨号器 实现的内容主要由界面布局设计和Activity的简单函数组成 首先是界面布局设计,最外层是垂直线性布局,分成三个部分:文本框,数字按键和功能键,在数字键部分采用网格布局, ...

最新文章

  1. C#中获取当前应用程序的路径及环境变量
  2. 3没有样式重置_系统重置新增选项,99%的人不知道怎么选
  3. python语言程序设计2019版第二章课后答案-python语言程序设计基础课后答案第二章...
  4. 网络编程学习笔记(socketpair函数)
  5. springboot项目启动后找不到jsp文件
  6. CV:深入浅出的讲解傅里叶变换(真正的通俗易懂)
  7. 获取指定日期的常用前后节点(月初月末周一周末等等)
  8. ORACLE数据库的模式对象的管理与维护
  9. 计算机微软云同步怎样安装软件,云骑士Win10微软账户设置同步的方法
  10. linux系统下在ubuntu20.04安装matlab2017总结
  11. 华为OD机试(JAVA)真题II
  12. Linux固态硬盘 设置写入缓存,固态硬盘做缓存如何设置
  13. linux修改IP地址的命令
  14. Chloe.Orm多表连接查询 (二)
  15. 深信服SSL远程接入与深信服行为审计同步登陆用户信息
  16. 2008年度中国最佳MBA排行榜
  17. Android studio Installed Build Tools revision 31.0.0 is corrupted. Remove and install again
  18. 【嵌入式学习-STM32F103-EXTI外部中断】
  19. 8051单片机Proteus仿真与开发实例-TLC2543(A/D)转换驱动仿真
  20. 音频数据的建模全流程代码示例:通过讲话人的声音进行年龄预测

热门文章

  1. 自然语言处理 —— 困惑度
  2. 去哪儿-17-detail-header
  3. OpenCV--实现图像滑动窗口截取子图操作
  4. ubuntu 16.04安装opencv 2.4.9及其关于qt的问题
  5. Hash(散列)建表及查找
  6. CentOs基础操作指令(vim、关机)
  7. 2008 Round1AA Minimum Scalar Product
  8. hmailserver php,hmailserver关于afterlogic webmail php版本下的用户密码修改功能
  9. python树代码_浅析AST抽象语法树及Python代码实现
  10. python代码控制机械臂_选用什么样的系统或平台开发机器人/机器臂?