C#窗体控制源代码

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WinF
{
 /// <summary>
 /// Control 的摘要说明。
 /// </summary>
 public class ControlApp
 {
  ///
  
  private System.Windows.Forms.Form senderForm;

  private string FilePath=System.AppDomain.CurrentDomain.BaseDirectory.ToString(); //窗体控件设置配置文件位置

  private System.Windows.Forms.Control sender;//定义被操作的控件

  private System.Windows.Forms.ContextMenu DeleCM=new ContextMenu();
  
  public ControlApp(System.Windows.Forms.Form senderForm,string FilePath)
  {
   this.senderForm=senderForm;
   this.FilePath=FilePath;
   StartControl();
  }

//  public System.Windows.Forms.Form sender_Form()
//  {
//   get {return this.senderForm;}
//  }

  
  #region///鼠标状态的枚举类型
  /// </summary>
  enum EnumMousePointPosition
  {
   MouseSizeNone = 0 ,//无

    MouseSizeRight = 1 ,//拉伸右边框

    MouseSizeLeft = 2 ,//拉伸左边框

    MouseSizeBottom = 3 ,//拉伸下边框

    MouseSizeTop = 4 ,//拉伸上边框

    MouseSizeTopLeft = 5 ,//拉伸左上角

    MouseSizeTopRight = 6 ,//拉伸右上角

    MouseSizeBottomLeft = 7 ,//拉伸左下角

    MouseSizeBottomRight = 8 ,//拉伸右下角

    MouseDrag = 9 ,//鼠标拖动
  }
  #endregion


  #region 右键菜单绑定(用于删除控件)
  private void BindMenu()
  {
   System.Windows.Forms.MenuItem DeleItem=new MenuItem();
   DeleItem.Text="删除";
   DeleItem.Click+=new EventHandler(Control_Delete);

   System.Windows.Forms.MenuItem AddItem=new MenuItem();
   AddItem.Text="恢复";
   AddItem.Click+=new EventHandler(Control_Delete);

   DeleCM.MenuItems.Add(0,DeleItem);
   DeleCM.MenuItems.Add(1,AddItem);
  }

  #endregion

  Point p,p1;//定义被操作控件的位置

  EnumMousePointPosition m_MousePointPosition=new EnumMousePointPosition(); //被操作控件当前的鼠标操作状态

  public  void Control_MouseMove(object Sender, System.Windows.Forms.MouseEventArgs e)
  {
   sender=(System.Windows.Forms.Control)Sender;
   if(e.Button==MouseButtons.Left)
   {
    switch(m_MousePointPosition)
    {
       case EnumMousePointPosition.MouseDrag:
       sender.Location = new Point(sender.Left + e.X - p.X, sender.Top + e.Y - p.Y);
      break;

       case EnumMousePointPosition.MouseSizeBottom:
       sender.Size = new Size(sender.Width, sender.Height + e.Y - p1.Y);
       p1 = new Point(e.X, e.Y) ;  //'记录光标拖动的当前点
      break;

       case EnumMousePointPosition.MouseSizeBottomRight:
      sender.Size = new Size(sender.Width + e.X - p1.X, sender.Height + e.Y - p1.Y);
       p1 = new Point(e.X, e.Y);
      break;

       case EnumMousePointPosition.MouseSizeRight:
       sender.Size = new Size(sender.Width + e.X - p1.X, sender.Height);
       p1 = new Point(e.X, e.Y);
      break;

       case EnumMousePointPosition.MouseSizeTop:
       sender.Location = new Point(sender.Left, sender.Top + (e.Y - p.Y));
       sender.Size = new Size(sender.Width, sender.Height - (e.Y - p.Y));
      break;

       case EnumMousePointPosition.MouseSizeLeft:
       sender.Location = new Point(sender.Left + e.X - p.X, sender.Top);
       sender.Size = new Size(sender.Width - (e.X - p.X), sender.Height);
      break;

       case EnumMousePointPosition.MouseSizeBottomLeft:
       sender.Location = new Point(sender.Left + e.X - p.X, sender.Top);
       sender.Size = new Size(sender.Width - (e.X - p.X), sender.Height + e.Y - p1.Y);
       p1 = new Point(e.X, e.Y);
      break;

       case EnumMousePointPosition.MouseSizeTopRight:
       sender.Location = new Point(sender.Left, sender.Top + (e.Y - p.Y));
       sender.Size = new Size(sender.Width + (e.X - p1.X), sender.Height - (e.Y - p.Y));
       p1 = new Point(e.X, e.Y);
      break;

       case EnumMousePointPosition.MouseSizeTopLeft:
       sender.Location = new Point(sender.Left + e.X - p.X, sender.Top + (e.Y - p.Y));
       sender.Size = new Size(sender.Width - (e.X - p.X), sender.Height - (e.Y - p.Y));
      break;
    }
   }
   else
   {
    m_MousePointPosition=ReEMPP(sender.Size,e);

    switch( m_MousePointPosition )  //改变光标
    {
       case EnumMousePointPosition.MouseSizeNone:

       sender.Cursor = Cursors.Arrow       ; //箭头
      break;

       case EnumMousePointPosition.MouseDrag:

       sender.Cursor = Cursors.SizeAll     ; //四方向
      break;

       case EnumMousePointPosition.MouseSizeBottom:

       sender.Cursor = Cursors.SizeNS      ; //南北
      break;

       case EnumMousePointPosition.MouseSizeTop:

       sender.Cursor = Cursors.SizeNS      ; //南北
      break;

       case EnumMousePointPosition.MouseSizeLeft:

       sender.Cursor = Cursors.SizeWE      ; //东西
      break;

       case EnumMousePointPosition.MouseSizeRight:


      sender.Cursor = Cursors.SizeWE      ; //东西
      break;

       case EnumMousePointPosition.MouseSizeBottomLeft:

       sender.Cursor = Cursors.SizeNESW    ; //东北到南西
      break;

       case EnumMousePointPosition.MouseSizeBottomRight:

       sender.Cursor = Cursors.SizeNWSE    ; //东南到西北
      break;

       case EnumMousePointPosition.MouseSizeTopLeft:

       sender.Cursor = Cursors.SizeNWSE    ; //东南到西北
      break;

       case EnumMousePointPosition.MouseSizeTopRight:

       sender.Cursor = Cursors.SizeNESW    ; //东北到南西
      break;
     }
   }
  }


  public void Control_MouseLeave(object Sender, System.EventArgs e)
  {
   sender=(System.Windows.Forms.Control)Sender;
   if(sender.ContextMenu!=null) //卸载右键菜单
   {
    //    sender.ContextMenu.Dispose();
   }
   m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;
   SetSenderBG(Color.White);//控件不再被控制时背景色为白色
    sender.Cursor = Cursors.Arrow;
   
  }


  public void Control_MouseDown(object Sender, System.Windows.Forms.MouseEventArgs e)
  {
   sender=(System.Windows.Forms.Control)Sender;

   if(sender.ContextMenu==null) //绑定右键菜单
   {
    if(DeleCM.MenuItems.Count==0)
    {
     BindMenu();
    }
    sender.ContextMenu=DeleCM;
   }
   SetSenderBG(Color.Yellow);//设定当前被操作控件的背景为黄色
   p=new Point(e.X,e.Y);
   p1=new Point(e.X,e.Y);
  }


  #region 控件删除事件的执行过程
  public void Control_Delete(object Sender, System.EventArgs e)
  {
   System.Windows.Forms.MenuItem it=(System.Windows.Forms.MenuItem)Sender;
   switch(it.Text)
   {
    case "删除":
     sender.Visible=false;
     break;
    case "恢复":
     sender.Visible=true;
     sender.BackColor=Color.White;//
     break;
   }
  }

  #endregion

  #region 设定控件背景色
  private void SetSenderBG(Color ColorValue) //设置控件背景色
  {
   if(sender.BackColor!=Color.Red)
   {
    sender.BackColor=ColorValue;
   }
  }

  #endregion

  private static EnumMousePointPosition ReEMPP(System.Drawing.Size size, System.Windows.Forms.MouseEventArgs e)
  {
   int Band = 10;
   if( e.X >= -1 * Band && e.X <= size.Width && e.Y >= -1 * Band && e.Y <= size.Height)
   {
    if (e.X < Band )
    {
     if (e.Y < Band )
     {
      return EnumMousePointPosition.MouseSizeTopLeft;
     }
     else
     {
      if(e.Y >( -1 * Band+size.Height))
       return EnumMousePointPosition.MouseSizeBottomLeft;
      else
       return EnumMousePointPosition.MouseSizeLeft;
     }
    }

    if (e.X > -1 * Band + size.Width )
    {
     if (e.Y < Band )
      return EnumMousePointPosition.MouseSizeTopRight;
     else if (e.Y > -1 * Band + size.Height)
      return EnumMousePointPosition.MouseSizeBottomRight;
     else
      return EnumMousePointPosition.MouseSizeRight;
    }
    else
    {
     if (e.Y < Band)
      return EnumMousePointPosition.MouseSizeTop;
     else if (e.Y > -1 * Band + size.Height)

      return EnumMousePointPosition.MouseSizeBottom;
     else
      return EnumMousePointPosition.MouseDrag;
    }
   }
   else
   {
    return EnumMousePointPosition.MouseSizeNone;
   }

  }

 

  #region //调整删除的控件是否可见
  public void DisDeleted(bool flag) 
  {
    foreach (Control ct in senderForm.Controls)
    {
     if(ct.Visible)
     {
      if(!flag)
      {
       if(ct.BackColor==Color.Red)
       {
        ct.Visible=false;
       }
      }
     }
     else
     {
      if(flag)
      {
       ct.Visible=true;
       ct.BackColor=Color.Red;
      }
     }
    }
  }
  #endregion
 

  public void StartControl()//初始化设置
  {
   foreach (Control ct in senderForm.Controls)
   {
    ct.MouseMove+=new MouseEventHandler(Control_MouseMove);
    ct.MouseLeave+=new EventHandler(Control_MouseLeave);
    ct.MouseDown+=new MouseEventHandler(Control_MouseDown);
   }
   senderForm.BackColor=Color.SkyBlue;
  }

  private void databind()
  {
   try
   {
  
    DataSet DS_Control=new DataSet();
    DS_Control.ReadXml(FilePath+"//FormControl.xml");
    DataView dv=new DataView(DS_Control.Tables["ControlTB"]);
    foreach (Control ct in this.Controls)
    {
     foreach(DataRowView drv in dv)
     {
      if(drv["ControlID"].ToString()==ct.Name)
      {
       ct.Width=int.Parse(drv["Width"].ToString());
       ct.Height=int.Parse(drv["Height"].ToString());
       Point p=new Point(int.Parse(drv["LocationX"].ToString()),int.Parse(drv["LocationY"].ToString()));
       ct.Location=p;
       ct.Visible=bool.Parse(drv["Visible"].ToString());
      }
     }
    }
   }
   catch(Exception e)
   {
    MessageBox.Show(e.ToString());
   }
  }

  #region //结束设置
  public void EndControl()
  {
   SaveData();
   foreach (Control ct in senderForm.Controls)
   {
    ct.MouseMove-=new MouseEventHandler(Control_MouseMove);
    ct.MouseLeave-=new EventHandler(Control_MouseLeave);
    ct.MouseDown-=new MouseEventHandler(Control_MouseDown);
   }
   senderForm.BackColor=Color.Snow;
   DisDeleted(false);
  }
  #endregion

  #region //参数保存过程
  private void  SaveData()
  {
   if(System.IO.Directory.Exists(FilePath))
   {
    System.IO.Directory.CreateDirectory(FilePath);
   }
   DataSet DS_Control=new DataSet();
   DataTable dt =new DataTable();
   dt.TableName="ControlTB";
   DataRow dr;
   try
   {
    dt.Columns.Add(new DataColumn("FormID", typeof(Int32)));
    dt.Columns.Add(new DataColumn("ControlID", typeof(string)));
    dt.Columns.Add(new DataColumn("Width", typeof(Int32)));
    dt.Columns.Add(new DataColumn("Height", typeof(Int32)));
    dt.Columns.Add(new DataColumn("LocationX", typeof(Int32)));
    dt.Columns.Add(new DataColumn("LocationY", typeof(Int32)));
    dt.Columns.Add(new DataColumn("Visible", typeof(bool)));
    dt.Columns.Add(new DataColumn("ModiDateTime", typeof(DateTime)));
   }
   catch(Exception e)
   {
    MessageBox.Show(e.ToString());
   }

   foreach (Control ct in sender.Controls)
   {
    dr = dt.NewRow();
    dr[0] = 123;
    dr[1] = ct.Name;
    dr[2] = ct.Width;
    dr[3] =ct.Height;
    dr[4]=ct.Location.X;
    dr[5]=ct.Location.Y;
    dr[6]=ct.Visible;
    dr[7]=DateTime.Now;
    dt.Rows.Add(dr);
   }
   DS_Control.Tables.Add(dt);
   DS_Control.WriteXml(FilePath+"//FormControl.xml");
   DS_Control.Dispose();
  }
  #endregion


  
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值