| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3208 人关注过本帖
标题:如何动态刷新控件的位置
只看楼主 加入收藏
huanganjun
Rank: 1
来 自:广东
等 级:新手上路
帖 子:149
专家分:0
注 册:2008-10-15
结帖率:100%
收藏
 问题点数:0 回复次数:4 
如何动态刷新控件的位置
我编写了一个程序,在程序里动态地移动控件位置,之前用this.Refresh()方法时winform界面是不断地闪烁,请问有没有什么办法可以让控件起到刷新这个作用,又不影响整个winform界面的不停闪烁
搜索更多相关主题的帖子: 控件 动态 位置 
2008-11-07 15:49
shmilylee
Rank: 2
来 自:江苏扬州蹩脚小公司
等 级:论坛游民
威 望:2
帖 子:242
专家分:22
注 册:2007-7-6
收藏
得分:0 
你代码是怎么写的?
不知道理解的对不对,没发现会闪啊
程序代码:
        private void button1_Click(object sender, EventArgs e)
        {
                this.button1.Location = new Point(200, 200);
        }


太可恶了,居然不能超过100个字符!
这区区100个又怎么能概括我平凡而又伟大的一生!
2008-11-07 16:50
huanganjun
Rank: 1
来 自:广东
等 级:新手上路
帖 子:149
专家分:0
注 册:2008-10-15
收藏
得分:0 
我的代码中有几个picturebox是通过按动某几个按钮,将picturebox的控件进行位置移动,然后这个picturebox又退回原来的位置,如果不用this.Refresh()这个方法,picturebox里面的图片有时候就显示不出来,而用了的话,界面就不断地进行闪烁,请问有什么好的建议
2008-11-07 18:34
shmilylee
Rank: 2
来 自:江苏扬州蹩脚小公司
等 级:论坛游民
威 望:2
帖 子:242
专家分:22
注 册:2007-7-6
收藏
得分:0 
好像解决不闪烁的话可以用"双缓冲技术",你正好趁这个机会研究一下,应该不难,我没遇到这个问题所以没研究,网上很多!
找了个例子,共同学习一下:
程序代码:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        int x = 0;

        public Form1()
        {
            InitializeComponent();
        }
        
        private void Form1_Load(object sender, EventArgs e)
        {
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);
            System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
            timer.Interval = 10;
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            DrawString("不闪烁,坚决不闪烁!");
        }

        private void DrawString(string text)
        {
            Rectangle rect = new Rectangle(0, 0, 800, 200);
            Bitmap bmp = new Bitmap(rect.Width, rect.Height);
            Graphics g = Graphics.FromImage(bmp);

            Font font = new Font("楷体_GB2312", 40);
            SizeF sf = g.MeasureString(text, font);
            float texty = (rect.Height - sf.Height) / 2;
            float textx = (rect.Width - sf.Width) / 2;
            LinearGradientBrush textbrush = new LinearGradientBrush(new PointF(0.0f, texty),
                           new PointF(0.0f, texty + font.GetHeight()), Color.DarkRed, Color.Red);
            LinearGradientBrush backbrush = new LinearGradientBrush(new PointF(0.0f, 0.0f),
                           new PointF(0.0f, rect.Height), Color.SkyBlue, Color.White);
            g.FillRectangle(backbrush, rect);
            g.DrawString(text, font, new SolidBrush(Color.FromArgb(128, 0, 0, 0)), x + 2, texty + 2);
            g.DrawString(text, font, textbrush, x, texty);
            g.DrawString(text, font, new SolidBrush(Color.FromArgb(128, 0, 0, 0)), rect.Width + x + 2, texty + 2);
            g.DrawString(text, font, textbrush, rect.Width + x, texty);
            x -= 1;
            if ((rect.Width + x) == 0) x = 0;
            this.CreateGraphics().DrawImage(bmp, 0, 100);
        }
    }
}



[[it] 本帖最后由 shmilylee 于 2008-11-7 23:35 编辑 [/it]]


太可恶了,居然不能超过100个字符!
这区区100个又怎么能概括我平凡而又伟大的一生!
2008-11-07 23:19
huanganjun
Rank: 1
来 自:广东
等 级:新手上路
帖 子:149
专家分:0
注 册:2008-10-15
收藏
得分:0 
谢啰,不过我想您加一些注释会更好一点,我是一名初学者,对您所写的代码中的一些函数并不是很熟悉

[[it] 本帖最后由 huanganjun 于 2008-11-8 00:44 编辑 [/it]]
2008-11-07 23:56
快速回复:如何动态刷新控件的位置
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032716 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved