c#窗体程序添加图标详细教程

这篇具有很好参考价值的文章主要介绍了c#窗体程序添加图标详细教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,为什么要给窗体程序添加图标

        俗话说:人靠衣装,马靠鞍。一个有个性的窗体程序,不能总是使用微软自带的默认图标,而给程序添加一个自己喜欢的图标,不仅彰显水平,还会增加用户的使用体验!所以,窗体程序加入合适的图标值得程序员的学习。下面就开始教程内容啦!!!

二,图标是什么

       摘抄自百度的定义: icon是一种图标格式,用于系统图标、软件图标等,这种图标扩展名为*.icon、*.ico。常见的软件或windows桌面上的那些图标一般都是ICON格式的。

        博主的理解:icon是图标的一种格式,是用来给系统图标或者软件图标的外表

比如:博主对任务管理器的截图

c#窗体程序添加图标详细教程

         如上面的截图,360是一款软件的程序,前面都有代表这款软件的图标(看到这个图标,我们就知道这款软件就是360这家公司的软件)

        注意:后台进程最后一个系统软件显示得到图标就是微软自带的默认图标(博主觉得又土又low)

续前面的理解:图标的扩展名是*.icon、*.ico,是不是我们只需要在文件夹里面给任意一种形式的图片改一个后缀就能将图片改成*.icon、*.ico格式的文件了呢?

        答案是不行的,敲重点了(博主测试后,发现这个图标死活添加不上)

三,如何转换成icon格式

        方式一:直接在网上搜索ICON图标在线转换(这个就不多讲了,自己摸索一下就知道了)

        方式二:使用icon图标转换软件
(迅捷的PDF转换器有这个功能),引用自我已经测试可用的转换软件

        下载地址ICO图标转换1.0密码:74nr

        方式三: 自己用c#写一个程序,将图片转换成ICON格式的图标(作为一个程序猿,不能什么都白嫖吧!!!所以记得评论+关注)

C#转换icon的原理:

        第一步:使用bitmap这个类( Bitmap 是用于处理由像素数据定义的图像的对象。)创建一个你想要制定大小的原位图(因为计算机操作系统和显示设备的多样性,导致了图标的大小需要有多种格式。扩展资料图标有一套标准的大小和属性格式,且通常是小尺寸的。有16*16,32*32,48*48

        第二步:使用IntPtr类获取原位图的图标句柄(C#中的IntPtr类型被称之为“平台特定的整数类型”,用于本机资源,例如窗口句柄。资源的大小取决于使用的硬件和操作系统,即此类型的实例在32位硬件和操作系统中将是32位,在64位硬件和操作系统中将是64位;但其大小总是足以包含系统的指针---简单来讲就是获得图标能够在计算机显示的必要条件)

        第三步:使用Icon这个类,从图标的指定WINDOWS句柄创建Icon(此时,图片已经转换成icon格式了)

附上,我引用的代码

public partial class Form1 : Form
    {
        Bitmap srcBitmap = null;//用于保存原图
        Size size;//用于保存目标图标的大小
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 选择源文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void browseBtn_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "图片(*.jpg,*.png,*.bmp)|*.jpg;*.png;*.bmp";//筛选文件格式
            dlg.ValidateNames = true;//文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
            dlg.CheckFileExists = true;///验证文件有效性
            dlg.CheckPathExists = true;//验证路径有效性

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pathTb.Text = dlg.FileName;
                srcBitmap = new Bitmap(dlg.FileName);

                this.srcPanel.Refresh();
            }
        }

        /// <summary>
        /// 禁止用户在此TextBox中输入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void textBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            //禁止用户输入
            e.Handled = true;
        }

        /// <summary>
        /// 绘制原图
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void srcPanel_Paint(object sender, PaintEventArgs e)
        {
            if (srcBitmap != null)
            {
                Graphics g = e.Graphics;

                //原图的绘制区域
                Rectangle rect = new Rectangle(0, 0, this.srcPanel.Width, this.srcPanel.Height);
                //在规定区域缩放绘制原图
                g.DrawImage(srcBitmap, rect);
            }
        }

        /// <summary>
        /// 实现bitmap到ico的转换
        /// </summary>
        /// <param name="bitmap">原图</param>
        /// <returns>转换后的指定大小的图标</returns>
        private Icon ConvertBitmap2Ico(Bitmap bitmap)
        {

            Bitmap icoBitmap = new Bitmap(bitmap, size);//创建制定大小的原位图

            //获得原位图的图标句柄
            IntPtr hIco = icoBitmap.GetHicon();
            //从图标的指定WINDOWS句柄创建Icon
            Icon icon = Icon.FromHandle(hIco);

            return icon;
        }

        /// <summary>
        /// 生成并保存图标
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void makeBtn_Click(object sender, EventArgs e)
        {
            if (Path.Text != "" && sizeComb.Text != "")
            {
                SaveFileDialog dlg = new SaveFileDialog();
                dlg.Filter = "图标(*.ico)|*.ico";
                dlg.CheckPathExists = true;
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = new FileStream(dlg.FileName, FileMode.Create);

                    Icon icon = ConvertBitmap2Ico(srcBitmap);

                    this.Icon = icon;

                    icon.Save(fs);//将Icon保存的指定的输出
                    fs.Close();
                }
            }
        }

        /// <summary>
        /// 选择目标图标的大小
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void sizeComb_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (sizeComb.SelectedIndex == 0)
            {
                size = new Size(16, 16);
            }
            else if (sizeComb.SelectedIndex == 1)
            {
                size = new Size(32, 32);
            }
            else
            {
                size = new Size(48, 48);
            }
        }
    }
}

 (不清楚,上述几个类的使用方式的可以自行查看MSDN文档)

四,给窗体或者快捷方式添加图标

        给快捷方式添加图标:

        第一步:右击解决方案,点击属性 

c#窗体程序添加图标详细教程

 第二步:在图标和清单点击浏览c#窗体程序添加图标详细教程

第三步:选择已经转换好的icon图标

c#窗体程序添加图标详细教程 判断你转换的icon格式是否正确方法:打开之后后面有图标显示c#窗体程序添加图标详细教程

最后就是自己查看它的图标啦 (在DDEBUG文件夹找到,你创建的快捷方式,就有显示你选择的图标)

给控件或者窗体添加图标

c#窗体程序添加图标详细教程

右击窗体属性,在icon添加图标即可

感谢观看!!!!!!文章来源地址https://www.toymoban.com/news/detail-490845.html

到了这里,关于c#窗体程序添加图标详细教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【VS Code 与 Qt6】QCheckBox的图标为什么不会切换?

    本篇专门扯一下有关 QCheckBox 组件的一个问题。老周不水字数,直接上程序,你看了就明白。 QCheckBox、QRadioButton、QPushButton 都是 QAbstractButton 的子类,所以这几个家伙都归属于按钮组件。在 QAbstractButton 类中已定义有 checkable 属性,表示按钮是否支持 check 操作。这种按钮就类似

    2024年02月07日
    浏览(31)
  • C#在winForm窗体中添加一个可以自由拖动的控件

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 一、实现步骤 1.创建一个新的Windows窗体项目 2.添加控件如图 3.代码部分 总结 textBox1=鼠标在需要拖动的控件中的坐标 X 值 textBox2=鼠标在需要拖动的控件中的坐标 Y 值 textBox3=需要

    2024年01月19日
    浏览(32)
  • 为什么在js中需要添加addEventListener()?

    addEventListener(监听器)--- EventTarget.addEventListener() 方法将指定的监听器注册到 EventTarget 上,当该对象触发指定的事件时,指定的回调函数就会被执行。事件目标可以是一个文档上的元素 Element、Document 和 Window,也可以是任何支持事件的对象(比如 XMLHttpRequest)。 addEventListener(

    2024年02月19日
    浏览(24)
  • 为什么C#要采用顶级语句?

    前言 有群友问:为什么C#要采用顶级语句? .NET6发布后,C#10莫名引入了顶级语句,这是一种简化代码结构的语言特性。在此之前,C#程序必须包含一个入口点,通常是Main方法,然后在该方法中编写主要的程序逻辑。而使用顶级语句后,可以直接在文件的顶部编写执行代码,而

    2024年02月01日
    浏览(31)
  • C#为什么非要把函数叫方法?

    引子 \\\"某呼\\\"网友提问“C#为什么非要把函数叫方法?”,看到这个问题还真不知道怎么回答。要想知道C#为什么叫方法,还得从传统面向过程语言说起。 方法的由来 函数(function)是面向过程编程语言里,对可以独立调用代码段的另一种叫法,因为通常有数个输入和一个输出

    2024年02月09日
    浏览(32)
  • 为什么除了null外,任何元素不得添加到上<? extends T>

    使用泛型类型参数限定为 ? extends T 时,我们无法确定实际类型参数是什么。这意味着我们只能安全地读取该类型的数据,但不能写入除了 null 以外的任何元素。 下面是一个示例代码,说明为什么无法向 ? extends T 类型的集合中添加任何元素: 在上面的示例中,我们有一个 i

    2024年02月12日
    浏览(31)
  • git将文件或目录添加进了.gitignore文件,为什么不生效?

    如题,之所以将文件添加进了.gitignore文件但不生效,是因为该文件已经被add进git仓库了,已经被git托管了,这时git就没法ignore了。解决办法是先用git rm --cached将这些文件从git仓库中取消托管并提交,然后.gitignore文件才会生效。详细见如下描述。 已经添加到git仓库中的文件,

    2024年02月03日
    浏览(39)
  • C# 线程本地存储 为什么线程间值不一样

    有朋友在微信里面问我,为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给后面类似疑问的朋友解个惑吧。 为了方便讲述,定义一个 Th

    2024年01月23日
    浏览(45)
  • 浅析 C# Console 控制台为什么也会卡死

    在分析旅程中,总会有几例控制台的意外卡死导致的生产事故,有经验的朋友都知道,控制台卡死一般是动了 快速编辑窗口 的缘故,截图如下: 虽然知道缘由,但一直没有时间探究底层原理,市面上也没有对这块的底层原理介绍,昨天花了点时间简单探究了下,算是记录分

    2024年02月08日
    浏览(50)
  • C#: Json序列化和反序列化,集合为什么多出来一些元素?

    如下面的例子,很容易看出问题: 如果类本身的无参构造函数, 就添加了一些元素,序列化,再反序列化,会导致元素增加。 如果要避免,必须添加: new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace }

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包