C# winform 窗体背景变换 急急急

施小可 2015-05-07 09:25:31

点击“ 换肤”,就会弹出一个像这样的框框
只能显示bnp,jpg等格式等图片,点击一个图片后就“保安”哪个背景图就换成选中的图片。
注:openfiledialog控件还不熟悉,手贱在任务书上写了。大神们救救急啊
...全文
358 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cai2h 2015-05-13
  • 打赏
  • 举报
回复
引用 11 楼 u011195564 的回复:
[quote=引用 10 楼 caihh1995 的回复:] 你会发现后面的两条语句没有加进if里面,打开文件选择而没有选着文件会发生错误,地址就为空了
而且换了皮肤,停止调试,再启动这个皮肤还是原来的皮肤,在怎么办? [/quote] 好像要保存设置吧,这个,后面调试直接读取上一次设置的图片为背景
cai2h 2015-05-13
  • 打赏
  • 举报
回复
搞的我欲仙欲死,汗,你用上面的会发现又有bug,第一次调试的时候,会发现路径不合法,弄了一会没有解决,后面删掉form1里面的this.backgroundimage=image.fromfile(str)后,调试成功,后面第二次调式在加上这句,调式还是成功,想了半天主要是第一次加载时ini里面为空,所以读取的路径不合法,后面if(str!=null)还是不行,真是醉了; 现在解决办法是
 public Form1()
        {
            InitializeComponent();
            string str = ini.readvalue("pifu", "divi");
            if (str.Length>4)
            {
                this.BackgroundImage = Image.FromFile(str);
            }
            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);
        }
你试试吧
cai2h 2015-05-13
  • 打赏
  • 举报
回复
添加一个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace yytd
{
    class Ini
    {
        //声明(把一个Win32 API函数转成C#函数)

        /// <summary>
        /// 声明INI文件的写操作函数 WritePrivateProfileString()
        /// </summary>
        /// <param name="section">配置节</param>
        /// <param name="key">键名</param>
        /// <param name="value">键值</param>
        /// <param name="filepath">地址</param>
        /// <returns></returns>
        [System.Runtime.InteropServices.DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string value, string filepath);

        /// <summary>
        ///  声明INI文件的读操作函数 GetPrivateProfileString()
        /// </summary>
        /// <param name="section">配置节</param>
        /// <param name="key">键名</param>
        /// <param name="def">用于读取时,为null返回def</param>
        /// <param name="reval">读取配置的字符串缓冲区</param>
        /// <param name="size">大小,至少为size</param>
        /// <param name="filepath">地址</param>
        /// <returns></returns>
        [System.Runtime.InteropServices.DllImport("kernel32")]
        private static extern long GetPrivateProfileString(string section, string key, string def, StringBuilder reval, int size, string filepath);
        private string sPath = null;


        /// <summary>
        ///主要用于传输地址 
        /// </summary>
        /// <param name="path">地址</param>
        public Ini(string path)
        {
            this.sPath = path;
        }

        /// <summary>
        /// 写函数,用于写配置
        /// </summary>
        /// <param name="section">配置节</param>
        /// <param name="key">配置节下的键名</param>
        /// <param name="value">键值</param>
        public void write(string section, string key, string value)
        {
            WritePrivateProfileString(section, key, value,sPath);
        }

        /// <summary>
        /// 读函数,用于读取配置
        /// </summary>
        /// <param name="section">配置节</param>
        /// <param name="key">键名</param>
        /// <returns>返回配置</returns>
        public string readvalue(string section, string key)
        {
            StringBuilder temp = new StringBuilder(255);
            GetPrivateProfileString(section, key, "", temp, 255, sPath);
            return temp.ToString();
        }

    }
}
 private void button8_Click(object sender, EventArgs e)
        {
            string URL =null;
            OpenFileDialog fm = new OpenFileDialog();
            fm.Filter = "图片格式|*.jpg;*.bmp";
            if (fm.ShowDialog() == DialogResult.OK)
            {
                URL = fm.FileName;
                this.BackgroundImage = Image.FromFile(URL);     
                this.BackgroundImageLayout = ImageLayout.Stretch;
                ini.write("pifu", "divi", URL);
            }
            
       
        }
类里面定义全局变量string st1
Ini ini = new Ini(@"D:\config.ini");
        public string str1;
form1里面添加
str1 = ini.readvalue("pifu", "divi");
load事件里面添加
this.BackgroundImage = Image.FromFile(str1);
施小可 2015-05-12
  • 打赏
  • 举报
回复
引用 10 楼 caihh1995 的回复:
你会发现后面的两条语句没有加进if里面,打开文件选择而没有选着文件会发生错误,地址就为空了
而且换了皮肤,停止调试,再启动这个皮肤还是原来的皮肤,在怎么办?
cai2h 2015-05-11
  • 打赏
  • 举报
回复
你会发现后面的两条语句没有加进if里面,打开文件选择而没有选着文件会发生错误,地址就为空了
施小可 2015-05-09
  • 打赏
  • 举报
回复
引用 8 楼 caihh1995 的回复:
[quote=引用 7 楼 caihh1995 的回复:] 忘了,窗体属性BackgroundImageLayout设置为Stretch,不然图片好像不会拉伸
this.BackgroundImageLayout = ImageLayout.Stretch;[/quote] 谢谢大神啊
施小可 2015-05-07
  • 打赏
  • 举报
回复
怎么图片上传不了,还是口述吧。 在菜单栏中有一个“换肤”的键,它的Name是换肤toolStripMenuItem,点击它以后会弹出一个用openfiledialog的文件框框,在框框中选择图片,在点击“打开“或”确定“就把背景换成该图片了
xuzuning 2015-05-07
  • 打赏
  • 举报
回复
施小可 2015-05-07
  • 打赏
  • 举报
回复
施小可 2015-05-07
  • 打赏
  • 举报
回复
cai2h 2015-05-07
  • 打赏
  • 举报
回复
引用 7 楼 caihh1995 的回复:
忘了,窗体属性BackgroundImageLayout设置为Stretch,不然图片好像不会拉伸
this.BackgroundImageLayout = ImageLayout.Stretch;
cai2h 2015-05-07
  • 打赏
  • 举报
回复
忘了,窗体属性BackgroundImageLayout设置为Stretch,不然图片好像不会拉伸
cai2h 2015-05-07
  • 打赏
  • 举报
回复
骚年,给分, private void button8_Click(object sender, EventArgs e) { string URL=""; OpenFileDialog fm = new OpenFileDialog(); if (fm.ShowDialog() == DialogResult.OK) { URL = fm.FileName; } this.BackgroundImage = Image.FromFile(URL); }

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧