昨天晚上看见了个帖子,野比小王子在2楼留下下了版主的http://blog.csdn.net/bdmh/article/details/7549140 ,今天下午没事做,自己也搞了一下,效果 不怎么好(窗体中有5个panel控件,设置其中4个的DOCK属性为TOP,具体见源码)。废话不多说,代码如下:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Font ft = new Font("黑体",12);
private static Panel iPanel= new Panel();
private static PictureBox iPict =new PictureBox(); private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = global::WindowsFormsApplication2.Properties.Resources.朝上按钮;
pictureBox1.Size = global::WindowsFormsApplication2.Properties.Resources.朝上按钮.Size;
pictureBox2.Image = global::WindowsFormsApplication2.Properties.Resources.朝上按钮;
pictureBox2.Size = global::WindowsFormsApplication2.Properties.Resources.朝上按钮.Size;
ft = label1.Font;
} private void label1_MouseEnter(object sender, EventArgs e)
{
((Label)sender).ForeColor = Color.Red;//设置控件文字字颜色
((Label)sender).Font = new Font(ft, ft.Style | FontStyle.Underline);//设置控件字体
} private void label1_MouseLeave(object sender, EventArgs e)
{
((Label)sender).ForeColor = Color.Black;//设置控件文字颜色
((Label)sender).Font = new Font(ft, ft.Style); //设置控件字体
} private void pictureBox1_Click(object sender, EventArgs e)
{
int i = Convert.ToInt16(((PictureBox)sender).Tag.ToString());
switch (i)
{
case 1:
iPanel = panel2_1;
iPict = pictureBox1;
break;
case 2:
iPanel = panel2_2;
iPict = pictureBox2;
break;
} if (Convert.ToInt16(iPanel.Tag.ToString()) == 1)
{
iPanel.Tag = 2;
iPict.Image = Properties.Resources.朝上按钮;
iPanel.Visible = true;
}
else
{
iPanel.Tag = 1;
iPict.Image = Properties.Resources.朝下按钮;
iPanel.Visible = false;
}
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Font ft = new Font("黑体",12);
private static Panel iPanel= new Panel();
private static PictureBox iPict =new PictureBox(); private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = global::WindowsFormsApplication2.Properties.Resources.朝上按钮;
pictureBox1.Size = global::WindowsFormsApplication2.Properties.Resources.朝上按钮.Size;
pictureBox2.Image = global::WindowsFormsApplication2.Properties.Resources.朝上按钮;
pictureBox2.Size = global::WindowsFormsApplication2.Properties.Resources.朝上按钮.Size;
ft = label1.Font;
} private void label1_MouseEnter(object sender, EventArgs e)
{
((Label)sender).ForeColor = Color.Red;//设置控件文字字颜色
((Label)sender).Font = new Font(ft, ft.Style | FontStyle.Underline);//设置控件字体
} private void label1_MouseLeave(object sender, EventArgs e)
{
((Label)sender).ForeColor = Color.Black;//设置控件文字颜色
((Label)sender).Font = new Font(ft, ft.Style); //设置控件字体
} private void pictureBox1_Click(object sender, EventArgs e)
{
int i = Convert.ToInt16(((PictureBox)sender).Tag.ToString());
switch (i)
{
case 1:
iPanel = panel2_1;
iPict = pictureBox1;
break;
case 2:
iPanel = panel2_2;
iPict = pictureBox2;
break;
} if (Convert.ToInt16(iPanel.Tag.ToString()) == 1)
{
iPanel.Tag = 2;
iPict.Image = Properties.Resources.朝上按钮;
iPanel.Visible = true;
}
else
{
iPanel.Tag = 1;
iPict.Image = Properties.Resources.朝下按钮;
iPanel.Visible = false;
}
}
}
}
推荐哦
cao版主要推荐哦
讨论一个问题:为什么腾讯QQ的截图工具截的图所占内存比我做的那个截图工具所占内存小呢?
另外自己水平有限,无法对鼠标进行重绘,写的代码也就那几行,不像版主们那样潇潇洒洒的几百行,求指导
如果哪天我被关了xhw
你记得要捞我出来
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace imageuptodown
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Bitmap bt;
private void Form1_Load(object sender, EventArgs e)
{
Bitmap s = new Bitmap(@"C:\Users\Administrator\Desktop\1.png");
bt = new Bitmap(s, panel1.Width, panel1.Height);
} private void button1_Click(object sender, EventArgs e)
{
int width = bt.Width;
int height = bt.Height;
Graphics g=this.panel1.CreateGraphics();
for (int x = 1; x <= height; x++)
{
Bitmap b = bt.Clone(new Rectangle(0, 0, width, x), System.Drawing.Imaging.PixelFormat.Format24bppRgb);
g.DrawImage(b, 0, 0);
System.Threading.Thread.Sleep(20);
}
}
}
}
初始panel1的背景图像为点击按钮进行从上向下拉伸(效果似遮罩)最后如图。明天开始加工。今天很高兴,大家晚安
自己架设个Windows Media Encoder做网络电台
这个主要是思路问题,比如普通的.NET小程序就要占用20MB以上的内存,虽然.NET程序吃内存是正常现象,但仍然可以通过代码来强制释放,另外,之所以说是思路问题,就是尽量避免在控件上重绘,脱离控件是最好的选择,当然,如果你用过我回复的那个截图示例的话,你可以自己去尝试一下.
Sorry,我们正好全部用的win7,因为我们在给客户用的时候就说明了。我们的软件只能在win7下运行。谢谢。
我们不做大众软件,所以不担忧这个问题
应你要求,在虚拟机的xp下写了个hello world,果断完爆你,你还要说什么?
自己写的东西有问题不要怪.net本身,你加载了一大堆图片占内存吧?
最近.net黑太多,比较敏感
额,你把编译好的exe放到csdn上,我给你测下看看。不过今天不行了,要明天。一会儿下班了,我家电脑也没xp。公司的也是用的虚拟机。
{
Bitmap myBitmap = new Bitmap(myBitmap1, this.Width, this.Height);
int intWidth = myBitmap.Width;//获取位图的宽度
int intHeight = myBitmap.Height / 20;//获取位图的高度
Graphics myGraphics = this.CreateGraphics();//创建画布对象
myGraphics.Clear(Color.WhiteSmoke);//清除整个画布并以指定背景色填充
Point[] myPoint = new Point[20];//创建一个Point类型的数组
for (int i = 0; i < 20; i++)//遍历myPoint数组中的元素
{
myPoint[i].X = 0;
myPoint[i].Y = i * intHeight;
}
Bitmap bitmap = new Bitmap(myBitmap.Width, myBitmap.Height);
for (int m = 0; m < intHeight; m++)
{
for (int n = 0; n < 20; n++)
{
for (int j = 0; j < intWidth; j++)
{
bitmap.SetPixel(myPoint[n].X + j, myPoint[n].Y + m, myBitmap.GetPixel(myPoint[n].X + j, myPoint[n].Y + m));
}
}
this.Refresh();
myGraphics.DrawImage(bitmap, 0, 0);
System.Threading.Thread.Sleep(50);
}百叶窗 很搓
既然你非要这么欠逼我彻底完爆你,我就让你心服口服。
你连试都没试就敢叫喧,莫非你真以为你很牛?
明知道自己的话已经出现问题不赶紧去求证,还来JJWW的,看来你真对不起你那两颗星。上图完爆你。
感谢dodducs帮忙测试。看来XP下的.NET的确要消耗较多的内存。设计和发布时需要加以注意。明白了。
不过我还是维持52楼的观点。
哎,最近心情不太好,比较难克制。
其实就像你说的,内存不重要,几十M而已,现在的内存都是单根2G了,而且我记得昨天看2G 1333才80多块一根。
本来他如果说C#吃内存,这个我不会反驳,毕竟C#需要加载的辅助Dll很多。没有这些Dll,C#跑不起来。这是事实,不可否认。
但是上来就说起码20M,这也太黑了。不过在这次验证中发现,win7针对.net framework是有了一定的优化。占用内存比以前小了很多。
估计win8应该会更少,期待win8的出现,更期待win8手机系统。我就在等nokia的win8系统手机呢,哈哈。
猜测win7应该是因为本身就已经加载了部分.net framework的dll,这样就没有必要再去让.net程序自己去加载。而这些dll所占用的内存也应该是属于系统某个进程的。
win7其实算是比较年轻的改革性系统了,win8出来应该更成熟,.net程序占用内存更少才对。
当然系统可能也会因此而变得吃内存点儿。不过这样起码解决了要安装.net framework的尴尬。
仅仅会些 .net 的皮毛,容易变得自大。
其实, dylike(潜心研究GDI+) 明显高出个别人好几个级别。 他的话,还是很有道理的。 只是个别句子表达不够精确罢了-----------
但如果要 回击dylike的这句“普通小程序都20M+” ,起码也要稍微有点 .net 的基础知识。 (如果hello world,都要占用 10M内存,实在是不合格的程序员。)野比的这个,稍微修改一下, 运行在XP, 就可以 3MB 左右的内存。
从这个角度看。 .net 用户, 非常参差不齐。
我在win7下截图,他说让我看xp,我用xp也截图了,他人丢了。你出来装了?
我哪个截图超过20M了?说话负点责任。
还有我的那个程序是在debug模式下生成的,不是release,也没选择项目的代码优化。很多优化操作没处理。但就算这样也没有20M,ok?另外野比的程序我也没有生成直接用他的debug模式生成的exe直接运行。
我只要验证了没到20M就行了,没有你老那么有闲心,证明了没到20M,还装作很厉害的样子说什么还可以再节省点内存。又说不要反驳某人。你自己打自己耳光么?你这逻辑真是,用你的话。跟正常人智商“参差不齐”
你学习操作系统原理, 看 window核心编程, 深入解析window, 以及各种深入.net解析...那你告诉我,你这些都做了, .net程序20M了么?你分析给我看看你都学的什么能让.net程序20M。
我倒是觉得你这逻辑蛮有趣的。
dylike 水平挺高.
dodducs 太过较真。