VS2008 WINFROM 利用WeifenLuo +OUTLOOKBAR +IrisSkin2.dll实现换肤 标签页面 以及子动态加载子菜单的实实例

 下面是全部页面的代码程序

using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows;
using System.Reflection;
using FYLC.MRMF.UserForm;
using FYLC.ClsMrmf;
using Microsoft.ApplicationBlocks.Data;
using System.Data.SqlClient;
using WeifenLuo.WinFormsUI.Docking;


namespace FYLC.MRMF
{
    public partial class FrmParent : Form
    {

        public DockPanel DockPanel
        {
            get { return this.dockPanel1; }
        
        }
        //定义委托
        public delegate void SendShop(ClsShop shop);
        public event SendShop sendshop;
        #region 设置窗体布局
            //定义初始窗体
            FrmLeft frmleft = new FrmLeft();
            FrmStar frmstart = new FrmStar();
            public  FrmUserList userlist = new FrmUserList();
          
            public DeserializeDockContent m_deserializeDockContent;
            
            /// <summary>
            /// 布局加载
            /// </summary>
            ///
            private void Get_UI()
            {
                m_deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString);
                string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockPanel.config");
                if (File.Exists(configFile))
                {
                    this.dockPanel1.LoadFromXml(configFile, m_deserializeDockContent);
                }
            
            }
            private IDockContent GetContentFromPersistString(string persistString)
            {
                if (persistString == typeof(FrmLeft).ToString())
                    return frmleft;
                else if (persistString == typeof(FrmStar).ToString())
                    return frmstart;
                //else if (persistString == typeof(FrmRoomView).ToString())
                //    return frmRoomView;
                else
                    return null;
            }
        #endregion
        
        public FrmParent()
        {
            InitializeComponent();

            this.skinEngine1.SkinFile = Application.StartupPath + @"\XPBlue.ssk";
                            
            Get_UI();//加载布局
            frmleft.Show(this.dockPanel1, DockState.DockLeft);
            frmstart.Show(this.dockPanel1);
            
        }
        //状态栏定义
        private void toolStripShow()
        {
            this.toolStripStatusLabel3.Text = "当前操作员:";
            this.toolStripStatusLabel4.Text = user._USERNAME;
            this.toolStripStatusLabel8.Text = "当前分店:";
            this.toolStripStatusLabel9.Text = shop.ShuoName.Trim();
        }
        

        DataTable dt;
        private void FrmParent_Load(object sender, EventArgs e)
        {
            timer1.Interval = 1000;
            timer1.Start();
            //加载状态栏
            toolStripShow();
            string comstr = "select * from SYS_MENU where MCAPTION <> '-'";
            dt = SqlHelper.ExecuteDataset(ClsComm.GetConString(), CommandType.Text, comstr).Tables[0];
            
            
            if (dt.Rows.Count >= 0)
            {
                ClsMenu menu = new ClsMenu();
                ToolStripMenuItem TopMenu = new ToolStripMenuItem();
                Bind_Menu(ref TopMenu, "0");
               
            }
            this.MainMenuStrip = this.menuStrip1;
        }
        #region  菜单栏调用
        
        private void Bind_Menu(ref ToolStripMenuItem TopMenu,string ParentId)
        {
            DataView view = new DataView(dt);
            //过滤下节菜单
            view.RowFilter = "MPARID=" + ParentId;
            ToolStripMenuItem subMenu;
            foreach(DataRowView dv in view ){
                subMenu = new ToolStripMenuItem();
                subMenu.Text = dv["MCAPTION"].ToString();
                subMenu.Name = dv["MID"].ToString();
                
                if (ParentId == "0")
                {
                    this.menuStrip1.Items.Add(subMenu);
                }
                else {
                    //扩展属性,可以加载任何想要的值,这里是FRM_NAME属性加载.
                    string s = dv["FRMNAME"].ToString().Trim();
                    int i= s.IndexOf("Frm");
                    if (i != -1)
                    {
                        subMenu.Tag = dv["CLSNAME"].ToString().Trim() + dv["FRMNAME"].ToString().Trim();
                        //给子菜单加载菜单加事件.
                        subMenu.Click += new EventHandler(subMenu_Click);
                    }else{
                        subMenu.Tag = dv["CLSNAME"].ToString().Trim() + dv["FRMNAME"].ToString().Trim();
                        subMenu.Click += new EventHandler(subMenu_Click_1);
                    
                    }
                    TopMenu.DropDownItems.Add(subMenu);


                }
                Bind_Menu(ref subMenu, dv["MID"].ToString());
            }

        }

        private void subMenu_Click_1(object sender,EventArgs e) {

            try
            {
                 string frmname = ((ToolStripMenuItem)sender).Tag.ToString();
                Assembly asm = Assembly.Load(Assembly.GetEntryAssembly().GetName().Name);
                object frmobj = asm.CreateInstance(frmname);
                Form f = (Form)frmobj;
                //f.MdiParent = this;
                f.Show();
            }
            catch (Exception ex) {

                MessageBox.Show(ex.ToString());
            }
           
        }
        /// <summary>
        /// 菜单子节点事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void subMenu_Click(object sender, EventArgs e)
        {
            //tag属性在这里有用到。这里用的是加载FRM的方法.
            string frmname = ((ToolStripMenuItem)sender).Tag.ToString();
            Create_From(frmname,sender.ToString());
        }
        /// <summary>
        /// 动态调用子窗体只实例化一次
        /// </summary>
        /// <param name="frmname"></param>
        public void Create_From(string frmname,string sender)
        {
           
            if (frmname == "")
            {
                MessageBox.Show("您没有此权限!");
            }
             else
              {
                  Assembly asm = Assembly.Load(Assembly.GetEntryAssembly().GetName().Name);
                  object frmobj = asm.CreateInstance(frmname);
                  FrmBase frmChild = (FrmBase)frmobj;
                  if (this.MdiChildren.Count() == 0)
                  {
                      frmChild.Tag = frmname;
                      frmChild.Text = sender;
                      frmChild.Show(this.dockPanel1);
                  }
                  else
                  {

                      for (int i = 0; i < this.MdiChildren.Count(); i++)
                      {
                          try
                          {
                              if (frmname == this.MdiChildren[i].Name)
                              {
                                  
                                  frmChild.Activate();
                                 

                              }
                              else
                              {
                                 
                                  frmChild.Tag = frmname;
                                  frmChild.Text = sender;
                                  if (frmChild.Name == "FrmUserList") {
                                      
                                      sendshop(shop);
                                  }
                                  frmChild.Show(this.dockPanel1);
                                  
                                 
                              }
                          }
                          catch (Exception ex) {
                              MessageBox.Show(ex.ToString());
                          }

                      }
                  }
              }
           
        
        }
       #endregion

        private void timer1_Tick(object sender, EventArgs e)
        {
            
            this.toolStripStatusLabel1.Text = "当前时间:";
            this.toolStripStatusLabel2.Text = DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss");
            
        }
        /// <summary>
        /// 打开导航栏
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            
            foreach (DockContent document in dockPanel1.Documents)
            {
                if (document.TabText == "导航窗口")
                {
                    frmleft.Activate();
                    break;
                }
                
                
            }
            //FrmLeft frm = new FrmLeft();
            //frm.Show(this.dockPanel1,DockState.DockLeft);

        }

        private void toolStripButton9_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("是否确定退出系统!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
            {
                this.Close();

            }
        }

        /// <summary>
        /// 打开本文件中的calc.exe
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton5_Click(object sender, EventArgs e)
        {
            System.Diagnostics.ProcessStartInfo StartInfo = new System.Diagnostics.ProcessStartInfo();
            StartInfo.FileName = Application.StartupPath + @"\calc.exe";
            System.Diagnostics.Process.Start(StartInfo);
           
        }

      
        /// <summary>
        /// 保存dockpanler的文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmParent_FormClosing(object sender, FormClosingEventArgs e)
        {
            string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockPanel.config");
            if (File.Exists(configFile) == false)
            {
                this.dockPanel1.SaveAsXml(configFile);
            }
            else
            {
                File.Delete(configFile);
            }
        }

    

    

      

      

      

       

       
              
    }
}



在.NET 8版本的C# Windows Forms中,实现窗体的浮动和停靠功能通常涉及到Form控件以及DockPanel控件的使用。以下是基本步骤: 1. **创建主窗体**: 创建一个新的Windows Form项目,这是程序的入口点。 2. **添加DockPanel**: 在设计视图中,在主窗体上添加一个DockPanel控件。DockPanel允许控件自动适应并停靠在窗体的边缘、顶部、底部、左边或右边。 3. **设置窗体**: 创建一个或多个窗体,并设置它们的FormBorderStyle属性为"None"以取消边框。然后,可以将其设置为TopLevelWindow属性为`false`,使其成为主窗体的一部分。 4. **浮动功能**: - 添加一个Button或其他控件到主窗体,作为浮动按钮。 - 在Button的Click事件处理程序中,通过`Show()`方法显示窗体,并传递Dock属性,如`Dock = DockStyle.Fill`使其填充整个DockPanel,或者`Dock = DockStyle.Top`让它停靠在顶部等。 5. **停靠功能**: - 窗体可以通过鼠标操作或代码来响应DockPanel上的更改。例如,你可以监听DockPanel的DockChanged事件,根据新的Dock值调整窗体的位置。 6. **代码示例** (简化版): ```csharp private void floatButton_Click(object sender, EventArgs e) { ChildForm childForm = new ChildForm(); childForm.Dock = DockPanel.DockStyle.Fill; // 或者指定其他Dock值 childForm.Show(this); } ``` 7. **记住关闭**: 确保关闭窗体时更新其Dock状态,以免造成意外影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值