04-自定义控件-简单图片查看器


闲着没事,学习了一下自定义控件相关的内容,从网上找了一个例子,并拓展了一些简单的功能,在此记录一下下。

1.自定义控件

1.1图片信息显示

(1)创建Windows窗体控件库,控件名称命名为UCPicture
在这里插入图片描述
(2)添加1个PictureBox控件,用来显示图片(pictureBox)。
添加4个lable,分别是:图片名称、图片大小、图片尺寸、图片路径。
添加3个TextBox,分别用来显示图片名称信息(txtName)、图片大小信息(txtLength)、图片尺寸信息(txtSize)。
添加1个RichTextBox(txtPath),用来显示图片路径信息。
添加1个按钮(btnOpen),用来选择需要查看的图片。
在这里插入图片描述
(3)添加程序处理代码

        /// <summary>
        /// 打开图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOpen_Click(object sender, EventArgs e)
        {
            //选择图片
            OpenFileDialog fileDialog = new OpenFileDialog();
            //设置选择图片的格式
            fileDialog.Filter = "JPG(*.JPG;*.JPEG);gif文件(*.GIF);PNG(*.PNG)|*.jpg;*.jpeg;*.gif;*.png";
            fileDialog.FilterIndex = 1;
            fileDialog.RestoreDirectory = true;
            fileDialog.FileName = string.Empty;
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                //文件路径
                path = fileDialog.FileName.ToString();
                FileInfo fileInfo = new FileInfo(path);
                //文件大小
                long picLong = fileInfo.Length / 1024;
                //文件名称
                fileName = fileInfo.Name;  
                Bitmap bmPic = new Bitmap(path); 
                Point location = new Point(bmPic.Size);
                if (location.X > pictureBox.Size.Width || location.Y > pictureBox.Size.Height)
                {
                    //设置pictureBox的显示模式
                    pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
                }
                else
                { 
                    pictureBox.SizeMode = PictureBoxSizeMode.CenterImage;
                } 
                //异步加载图像
                pictureBox.LoadAsync(path);
                //图片名称
                this.txtName.Text = fileName;
                //图片路径
                this.txtPath.Text = path;
                //图片大小
                this.txtLength.Text = picLong.ToString() + "KB";
                //图片尺寸
                this.txtSize.Text = bmPic.Size.Width.ToString() + "x" + bmPic.Size.Height.ToString();
            }
        }

(4)测试控件。
重新生成一下UCPicture控件,设置UCPicture控件为启动项,f5运行。
在这里插入图片描述
在这里插入图片描述
(5)使用控件
创建一个Windows窗体,此时会在工具箱中看到新增加的自定义控件UCPicture,直接将这个控件拖拽到窗体上即可。选择一个图片,显示该图信息,则测试成功。
在这里插入图片描述
在这里插入图片描述

1.2图片查看方式

(1)在UCPicture控件中新增加ContextMenuStrip控件
在这里插入图片描述
手动添加菜单项
在这里插入图片描述
(2)具体代码

        /// <summary>
        /// 给各个右键菜单项一次性添加自定义事件
        /// </summary>
        /// <param name="m"></param>
        private void AddMenuEvent(ContextMenuStrip m)
        {
            //一层菜单的处理
            //foreach (ToolStripMenuItem item in contextMenuStrip1.Items)
            //{
            //    item.Click += new EventHandler(MenuEvent); 
            //}
            //二层菜单处理
            foreach (ToolStripMenuItem item in contextMenuStrip1.Items)
            {
                ChildMenu(item);
            }
        }
        
        /// <summary>
        /// 子菜单
        /// </summary>
        /// <param name="item"></param>
        private void ChildMenu(ToolStripMenuItem item)
        {
            if (item.HasDropDownItems)
            {
                //如果有子菜单
                foreach (ToolStripMenuItem m in item.DropDownItems)
                {
                    ChildMenu(m);
                }
            }
            else
            {
                //如果没有子菜单就直接添加自定义事件 MenuEvent
                item.Click += new EventHandler(MenuEvent);
            }
        }
        
        /// <summary>
        /// 右键菜单事件方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuEvent(object sender, EventArgs e)
        {
            ToolStripMenuItem ts = (sender as ToolStripMenuItem);
            //获取子菜单的上一级菜单  string oweraitem=ts.OwnerItem.Text;
            string thecmdstr = ts.Text;
            switch (thecmdstr)
            {
                case "画图工具":
                    PictureDraw();
                    break;
                case "图片查看器":
                    PictureViewer();
                    break;
                case "重命名":
                    ReName(path);
                    break;
                default:
                    break;
            }
        }
        
        /// <summary>
        /// 图片查看器查看图片
        /// </summary>
        private void PictureViewer()
        {
            Process proc = new Process();
            proc.StartInfo.WorkingDirectory = path;
            proc.StartInfo.FileName = "rundll32.exe";
            proc.StartInfo.Arguments = @"C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen " + path;
            proc.Start();
        }

        /// <summary>
        /// 使用画图工具显示图片
        /// </summary>
        private void PictureDraw()
        {
            System.Diagnostics.Process.Start("mspaint.exe", path);
        }

1.3图片重命名

具体代码如下:

        /// <summary>
        /// 重命名
        /// </summary>
        private void ReName(string filePath)
        {
            this.txtName.ReadOnly = false;
            //默认选中文本
            this.txtName.Select();
        }
        /// <summary>
        /// 重命名后,回车键确认
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lblName_KeyPress(object sender, KeyPressEventArgs e)
        {
            //回车键确认
            if (e.KeyChar == 13)
            {
                string newFileName = this.txtName.Text;
                Computer MyComputer = new Computer();
                MyComputer.FileSystem.RenameFile(path, newFileName);
                this.txtName.ReadOnly = true;
            }  
        }

2.换肤

暂时是用的IrisSkin进行换肤。IrisSkin4.dll和皮肤文件都是从网上下载的。
将IrisSkin4.dll和皮肤文件放到bin/debug目录下。
(1)添加下拉框,用来显示所有的皮肤
在这里插入图片描述
(2)在程序的资源管理器中的【引用】上单击右键,选择【添加引用】,找到刚才复制过来的IrisSkin4.dll文件,点击【确定】
(3)【工具】——>【选择工具箱项——>【.NET Framework组件】——>【浏览】——>找到IrisSkin4.dll——>点击【确定】,SkinEngine控件加入到工具箱
在这里插入图片描述

(4)具体代码实现

        SkinEngine skinEngine = new SkinEngine();
        private void Form1_Load(object sender, EventArgs e)
        {
            skinEngine.SkinAllForm = true;
        }
        /// <summary>
        /// 获取所有皮肤文件
        /// </summary>
        private void GetSkin()
        {
            string path = System.Environment.CurrentDirectory + "\\Skins";  //选择皮肤文件 
            DirectoryInfo folder = new DirectoryInfo(path);
            foreach (FileInfo file in folder.GetFiles("*.ssk"))
            {
                this.cbxSkin.Items.Add(file.Name);
            }
        }
        /// <summary>
        /// 皮肤选择事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cbxSkin_SelectedIndexChanged(object sender, EventArgs e)
        {
            string name = this.cbxSkin.SelectedItem.ToString();
            string skinInfo = string.Format("Skins/{0}", name);
            skinEngine.SkinFile = skinInfo;
        }

(5)最终效果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值