C# winform中鼠标按住窗体顶部,窗体中控件正常刷新数据

木有了 2014-04-03 03:42:12
各位,帮个忙吧,现在做了个小程序读取com口数据,然后想鼠标按住窗体顶部边框时,窗体能够正常刷新数据。

目前按住窗体顶部,界面不刷新。多谢!
...全文
206 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2014-04-04
  • 打赏
  • 举报
回复
你确定是这样吗?我尝试过运行中按住标题栏,只有很小的一个停顿,然后继续输出结果
木有了 2014-04-04
  • 打赏
  • 举报
回复
引用 4 楼 xdashewan 的回复:
不知道这是不是楼主想要的效果

        private delegate void UpdatelableDelegate(int i);
        private void button1_Click(object sender, EventArgs e)
        {
            Thread a = new Thread(t);
            a.Start();
        }

        public void t()
        {
            UpdatelableDelegate up = new UpdatelableDelegate(updLable);
            for (int i = 0; i <= 100; i++)
            {
                this.Invoke(up, i);
                System.Threading.Thread.Sleep(100);
            }
        }

        private void updLable(int i)
        {
            this.label1.Text = i.ToString();
        }
控件自己添加下
现在是这样,我点击start之后,窗体里面的所有Textbox和listbox里面的数据都是在这个button点击之后开始执行。 然后我鼠标按住上面给出的图的位置(窗体顶部位置),目前是窗体里面的数据停止更新了,一旦松开就获取新数据。我想要的效果是按住鼠标依然能实时获取数据,实际上就是不知道按住这个位置触发啥事件。
xdashewan 2014-04-04
  • 打赏
  • 举报
回复
不知道这是不是楼主想要的效果

        private delegate void UpdatelableDelegate(int i);
        private void button1_Click(object sender, EventArgs e)
        {
            Thread a = new Thread(t);
            a.Start();
        }

        public void t()
        {
            UpdatelableDelegate up = new UpdatelableDelegate(updLable);
            for (int i = 0; i <= 100; i++)
            {
                this.Invoke(up, i);
                System.Threading.Thread.Sleep(100);
            }
        }

        private void updLable(int i)
        {
            this.label1.Text = i.ToString();
        }
控件自己添加下
木有了 2014-04-04
  • 打赏
  • 举报
回复
引用 2 楼 foreverwoyou 的回复:
没听明白。。。


就是鼠标按住窗体顶部,然后创体内的数据正常获取并刷新。
稻庄 2014-04-04
  • 打赏
  • 举报
回复
没听明白。。。
木有了 2014-04-04
  • 打赏
  • 举报
回复
也没个人回复一下????
xdashewan 2014-04-04
  • 打赏
  • 举报
回复
我还是感觉楼主在线程处理方式上存在问题,导致无法刷新
xdashewan 2014-04-04
  • 打赏
  • 举报
回复
读串口你应该线程里读的吧,先抛开你的画面的那么控件不管,把你的按钮时间直接改成我的代码,改下我的代码,不设置lable而设置你画面中的一个textbox,你看看有效果没。
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
是这个吗 我用线程写的 更新的时候拖动窗口 继续更新 不停顿
  • 打赏
  • 举报
回复
用线程不行吗 楼上说的
xdashewan 2014-04-04
  • 打赏
  • 举报
回复
这个真不知道有没有,但换个思路,如果你认为只要能抓住这个事件就能解决问题的话,那么你大可以把自带的标题栏隐藏,然后自己画一个标题栏代替,这样事件就都能捕捉到了,你说是不?
木有了 2014-04-04
  • 打赏
  • 举报
回复
引用 11 楼 xdashewan 的回复:
你试过我的程序没,如果试过,建议你可以做如下尝试 1.把你form改的不能再简单,然后检测是否按住标题时有刷新 2.如果有刷新,就逐渐把你的控件加进去,一次一个别太多然后继续查看 3.如果没有刷新,请检查自己的逻辑是否存在问题,因为我事例是可以刷新的 特别提醒:改前请先备份
我里面是这样写的,你看能否帮我改下,

private void button_start_Click(object sender, EventArgs e)
        {
            //打开串口
           // 读取串口数据
           //所有textbox.text内容均实时变化
        }
如果拆分的话我应该怎样划分呢?
木有了 2014-04-04
  • 打赏
  • 举报
回复
引用 11 楼 xdashewan 的回复:
你试过我的程序没,如果试过,建议你可以做如下尝试 1.把你form改的不能再简单,然后检测是否按住标题时有刷新 2.如果有刷新,就逐渐把你的控件加进去,一次一个别太多然后继续查看 3.如果没有刷新,请检查自己的逻辑是否存在问题,因为我事例是可以刷新的 特别提醒:改前请先备份
多谢,你这个原理我知道,不过我自己里面的数据要实现的话,比较麻烦,传值是比较费事的。其实我想知道的是按住鼠标这个有没有一个事件?只能通过这种方式处理?
xdashewan 2014-04-04
  • 打赏
  • 举报
回复
你试过我的程序没,如果试过,建议你可以做如下尝试 1.把你form改的不能再简单,然后检测是否按住标题时有刷新 2.如果有刷新,就逐渐把你的控件加进去,一次一个别太多然后继续查看 3.如果没有刷新,请检查自己的逻辑是否存在问题,因为我事例是可以刷新的 特别提醒:改前请先备份
木有了 2014-04-04
  • 打赏
  • 举报
回复
引用 7 楼 wpfLove 的回复:
[quote=引用 5 楼 xdxxzj 的回复:] [quote=引用 4 楼 xdashewan 的回复:] 不知道这是不是楼主想要的效果

        private delegate void UpdatelableDelegate(int i);
        private void button1_Click(object sender, EventArgs e)
        {
            Thread a = new Thread(t);
            a.Start();
        }

        public void t()
        {
            UpdatelableDelegate up = new UpdatelableDelegate(updLable);
            for (int i = 0; i <= 100; i++)
            {
                this.Invoke(up, i);
                System.Threading.Thread.Sleep(100);
            }
        }

        private void updLable(int i)
        {
            this.label1.Text = i.ToString();
        }
控件自己添加下
现在是这样,我点击start之后,窗体里面的所有Textbox和listbox里面的数据都是在这个button点击之后开始执行。 然后我鼠标按住上面给出的图的位置(窗体顶部位置),目前是窗体里面的数据停止更新了,一旦松开就获取新数据。我想要的效果是按住鼠标依然能实时获取数据,实际上就是不知道按住这个位置触发啥事件。[/quote] 在windows中所有的窗体都是这样处理,当你按下鼠标,甚至在关闭按钮上按下鼠标,整个窗体就停止刷新,应该说程序仍然在运行中,只是没有重绘窗体;[/quote] 我应该怎样处理呢?所有往textbox和listbox里面写数据的操作都在button_click(start按钮)里面触发的,我在边框位置按下鼠标之后,怎样处理呢,就像你说的没有重绘,我应该怎样写呢
shawn_yang 2014-04-04
  • 打赏
  • 举报
回复
线程
木有了 2014-04-04
  • 打赏
  • 举报
回复
引用 6 楼 xdashewan 的回复:
你确定是这样吗?我尝试过运行中按住标题栏,只有很小的一个停顿,然后继续输出结果
我确定,我用的C# winform写的,实现从gps读取数据(串口),然后鼠标只要点击(按住不放)边框位置,里面的数据就不刷新,如果鼠标按在窗体内,这时候能正常刷数据。
小猪八Q 2014-04-04
  • 打赏
  • 举报
回复
引用 5 楼 xdxxzj 的回复:
[quote=引用 4 楼 xdashewan 的回复:] 不知道这是不是楼主想要的效果

        private delegate void UpdatelableDelegate(int i);
        private void button1_Click(object sender, EventArgs e)
        {
            Thread a = new Thread(t);
            a.Start();
        }

        public void t()
        {
            UpdatelableDelegate up = new UpdatelableDelegate(updLable);
            for (int i = 0; i <= 100; i++)
            {
                this.Invoke(up, i);
                System.Threading.Thread.Sleep(100);
            }
        }

        private void updLable(int i)
        {
            this.label1.Text = i.ToString();
        }
控件自己添加下
现在是这样,我点击start之后,窗体里面的所有Textbox和listbox里面的数据都是在这个button点击之后开始执行。 然后我鼠标按住上面给出的图的位置(窗体顶部位置),目前是窗体里面的数据停止更新了,一旦松开就获取新数据。我想要的效果是按住鼠标依然能实时获取数据,实际上就是不知道按住这个位置触发啥事件。[/quote] 在windows中所有的窗体都是这样处理,当你按下鼠标,甚至在关闭按钮上按下鼠标,整个窗体就停止刷新,应该说程序仍然在运行中,只是没有重绘窗体;

110,538

社区成员

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

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

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