精华内容
下载资源
问答
  • winform页面刷新
    2021-01-26 14:16:20

    1,设定个别控件的双缓冲:

     public static void SetDoubleBuffered(object obj)
            {
                
                Type type = obj.GetType();
                PropertyInfo pi = type.GetProperty("DoubleBuffered",
                    BindingFlags.Instance | BindingFlags.NonPublic);
                pi.SetValue(obj, true, null);
            }
    

    2,跳过系统消息

    protected override CreateParams CreateParams
     {
     get
        { 
                    CreateParams cp = base.CreateParams;
                    cp.ExStyle |= 0x02000000;
                    return cp;
        } 
     }
    

    3,整个form的双缓冲(基本没有啥用)

    this.DoubleBuffered = true;//设置本窗体 
     SetStyle(ControlStyles.UserPaint, true); 
     SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. 
     SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
      SetDoubleBuffered(PanelIndex);
     SetDoubleBuffered(PanelControl);
    

    4,跳过系统的信息

      protected override void WndProc(ref Message m)
     {
                     if (m.Msg == 0x0014) // 禁掉清除背景消息
                       return;
                     if(m.Msg == 0xf)
                    return;
                if (m.Msg == 0x88)
                    return;
                base.WndProc(ref m);
            }
    
    更多相关内容
  • C#winform 界面刷新

    千次阅读 2021-04-21 13:39:32
    1. 跨线程界面更新 1.1通过委托更新界面 public delegate void RefreshInterface(int num);//创建委托,含有一个参数num bool MyThreadIsRun = false;//用来控制线程状态 private Thread MyThread = null;...

    1. 跨线程界面更新

    1.1通过委托更新界面

    public delegate void RefreshInterface(int num);//创建委托,含有一个参数num
    bool MyThreadIsRun = false;//用来控制线程状态
    private Thread MyThread = null; //创建线程
    
    private void button1_Click(object sender, EventArgs e)
    {
        MyThreadIsRun = !MyThreadIsRun;//切换线程状态
        MyThread = new Thread(Method);//实例化线程对象传递参数
        MyThread.Start();//开启线程
    }
    
    /// <summary>
    /// 线程所需方法
    /// </summary>
    public void Method()
    {
        RefreshInterface dele = new RefreshInterface(RefreshInterfaceMethod);//给委托对象传递值
        for (int i = 0; i < 1000000; i++)
        {
            if (!MyThreadIsRun)
                break;//当线程状态为false则退出循环
            this.Invoke(dele, i);//执行指定委托,将i的值传递给委托执行方法,更新界面数据
        }
    }
    
    /// <summary>
    /// 委托所需方法
    /// </summary>
    /// <param name="num">接收传递的值</param>
    public void RefreshInterfaceMethod(int num)
    {
        textBox1.Text = num.ToString();//给显示框赋值
    }
    
    /// <summary>
    /// 关闭窗体事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
    
        MyThreadIsRun = false;//关闭线程
        //保证程序退出前,关闭线程(之所以有这个提示框,是为了线程彻底关闭,否则当关闭时,线程可能在执行过程中会出错)
        MessageBox.Show("谢谢使用");
    }
    
    

    1.2 通过Invoke更新

    //1.通过点击时间开启线程
    private void btn_Click(object sender, EventArgs e)
    {
    	Thread th = new Thread(A);
    	th.Start();
    }
    
    //2.在线程中使用Invoke更新界面
    public void A()
    {
    	//循环更新界面20次,每次睡眠200毫秒,
        for (int i = 0; i < 20; i++)
        {
            Invoke(new EventHandler(delegate
            {
                label.Text = "关闭" + i;
            }));
            Thread.Sleep(200);
        }
    }
    

    2 跨窗体更新界面

    2.1 直接更新

    	Application.OpenForms[“窗体名称”].Controls[“控件名称”].Visible = true;
    

    2.2 获取窗体实例对象更新

    
    //1.在A中实例化B的对象,调用B窗体,传递A窗体实例化对象
    B B = new B(this);
    B.ShowDialog();
    
    //2.在B窗体的构造函数获取A窗体的实例化对象
    A _a;
    public B(A a)
    {
      InitializeComponent();
      _a = a;
    }
    
    //3.在B中使用A的实例,更新A界面的数据和属性
    public void MyFun()
    {
      _a.lbl1.Text = "更新后Text";
    }
    
    展开全文
  • 可实现在子窗体执行完某一操作后同步刷新父窗体,主要通过委托事件实现。
  • C#WinForm,多线程快速刷新界面。没什么高级技术。只希望能解决一下需要多线程与UI快速交互的朋友的问题。
  • Winform实时刷新界面的正确姿势

    千次阅读 2021-03-13 17:32:40
    最近在审核工程师代码的时候,一个简单的工厂自动化软件,结果看到了居然用Timer来刷新界面通过串口过来的数据... 难怪工厂测试人员一直给我反馈说我们这个系统有时候会很卡! 这样的方式来处理界面的呈现不卡死才...

    1.前言

    最近在审核工程师代码的时候,一个简单的工厂自动化软件,结果看到了居然用Timer来刷新界面通过串口过来的数据...

    难怪工厂测试人员一直给我反馈说我们这个系统有时候会很卡!

    这样的方式来处理界面的呈现不卡死才出怪事了!

    2.如何界面上正确的体现实时交互数据

    需要了解一个接口:INotifyPropertyChanged

    意思是说,如果我这边的实体类数据发生了变化,会向客户端发送通知,告诉客户端来更新实体类的值,前提是实体类与界面上的客户端已经进行了绑定

    在实体类里面增加以下代码:

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
    {
          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    如果我们需要将哪个字段发生了变化通知到界面进行更新,则在字段的set{}里面增加:

    NotifyPropertyChanged("当前字段名称");

    如:

    private int _FPacketIndex;
    public int FPacketIndex {
    get { return _FPacketIndex; }
    set {  _FPacketIndex = value;
           NotifyPropertyChanged("FPacketIndex");
         }
    }

    然后定义一个BingingList,比如:

    private BindingList<UpgradeObject> upgradedList = new BindingList<UpgradeObject>();

    在界面初始化的时候将upgradedList绑定到DataGridView

     dgv_Upgrading.DataSource = upgradingList;

    这样只要FPacketIndex字段发生了更新,界面上就会马上呈现更新的值

    展开全文
  • winform中的UI刷新总结

    2021-02-27 14:56:37
    C# winform中的UI刷新总结前言一、管理控件刷新1.创建R_HomeForm.cs2.在Home_Form.cs中设置委托和对应的刷新方法3.方法调用4.定时器和UI刷新总结 前言 winform中的控件刷新是一个非常常见的知识点,可以通过Invoke...


    前言

    winform中的控件刷新是一个非常常见的知识点,可以通过Invoke方法很简单地去实现。在一次产测开发中我就经常遇到控件刷新的很多问题,比如说控件比较多,调用刷新方法频繁的时候我们该怎么操作以及采用自动刷新UI怎么实现。


    一、管理控件刷新

    为了便于管理每个Form中的控件,并且结合安卓中的R.java文件,可以给每个Form创建一个R_xxForm.cs文件。

    1.创建R_HomeForm.cs

    代码如下(拿button为例):

     public class R_HomeForm{
    	 	public class Button {
                public const int idConTips = 0x000;
                public const int idOKConTips = 0x100;
                public const string nameConTips = "ConTips";
                
                public const int idSoftWareButton = 0x001;
                public const string nameSoftWareButton = "SoftWareButton";
                
                public const int idFlashSizeButton = 0x002;
                public const string nameFlashSizeButton = "FlashSizeButton";
                
                public const int idDDRSizeButton = 0x003;
                public const string nameDDRSizeButton = "DDRSizeButton";
                
                public const int idWIFITestButton = 0x004;
                public const string nameWIFITestButton = "WIFITestButton";
                
                public const int idBTTestButton = 0x005;
                public const string nameBTTestButton = "BTTestButton";
                
                public const int idUARTTestButton = 0x006;
                public const string nameUARTTestButton = "UARTTestButton";
                
                public const int idKeyTestButton = 0x007;
                public const string nameKeyTestButton = "KeyTestButton";
                
                public const int idLEDTestButton = 0x008;
                public const string nameLEDTestButton = "LEDTestButton";
                
                public const int idAMPTestButton = 0x009;
                public const string nameAMPTestButton = "AMPTestButton";
                
                public const int idMICTestButton = 0x00a;
                public const string nameMICTestButton = "MICTestButton";
                
                public const int idRemoteStartButton = 0x00b;
                public const string nameRemoteStartButton = "RemoteStartButton";
                
                public const int idRemoteLearnButton = 0x00c;
                public const string nameRemoteLearnButton = "RemoteLearnButton";
                
                public const int idCMTLearnButton = 0x00d;
                public const string nameCMTLearnButton = "CMTLearnButton";
                
                public const int idZigbeeVersionButton = 0x00e;
                public const string nameZigbeeVersionButton = "ZigbeeVersionButton";
            }
    }
    

    2.在Home_Form.cs中设置委托和对应的刷新方法

    代码如下:

    //委托方法
            private delegate void delegateAddText();
            private delegate void delegateButton();
    
    
     //Button显示
            public void ShowButton(int id) {
                switch (id){
                    //刷新按键为Disable模式
                    case R_HomeForm.Button.idConTips:
                        ConTips.Invoke(new delegateAddText(viewShowClass.AddTipsNC));
                        break;
                    case R_HomeForm.Button.idOKConTips:
                        ConTips.Invoke(new delegateAddText(viewShowClass.AddTipsOK));
                        break;
                    case R_HomeForm.Button.idSoftWareButton:
                        SoftWareButton.Invoke(new delegateButton(buttonShowClass.ReVersionButton));
                        break;
                    case R_HomeForm.Button.idDDRSizeButton:
                        DDRSizeButton.Invoke(new delegateButton(buttonShowClass.ReDDRButton));
                        break;
                    case R_HomeForm.Button.idFlashSizeButton:
                        FlashSizeButton.Invoke(new delegateButton(buttonShowClass.ReFlashButton));
                        break;
                    case R_HomeForm.Button.idWIFITestButton:
                        WIFITestButton.Invoke(new delegateButton(buttonShowClass.ReWIFIButton));
                        break;
                    case R_HomeForm.Button.idBTTestButton:
                        BTTestButton.Invoke(new delegateButton(buttonShowClass.ReBTButton));
                        break;
                    case R_HomeForm.Button.idUARTTestButton:
                        UARTTestButton.Invoke(new delegateButton(buttonShowClass.ReUARTButton));
                        break;
                    case R_HomeForm.Button.idLEDTestButton:
                        LEDTestButton.Invoke(new delegateButton(buttonShowClass.ReLEDButton));
                        break;
                    case R_HomeForm.Button.idMICTestButton:
                        MICTestButton.Invoke(new delegateButton(buttonShowClass.ReMICButton));
                        break;
                    case R_HomeForm.Button.idAMPTestButton:
                        AMPTestButton.Invoke(new delegateButton(buttonShowClass.ReAMPButton));
                        break;
                    case R_HomeForm.Button.idKeyTestButton:
                        KeyTestButton.Invoke(new delegateButton(buttonShowClass.ReKEYButton));
                        break;
                    case R_HomeForm.Button.idRemoteStartButton:
                        RemoteStartButton.Invoke(new delegateButton(buttonShowClass.ReRemoteStartButton));
                        break;
                    case R_HomeForm.Button.idRemoteLearnButton:
                        RemoteLearnButton.Invoke(new delegateButton(buttonShowClass.ReRemoteLearnButton));
                        break;
                    case R_HomeForm.Button.idCMTLearnButton:
                        cMTLearnClass.IsTestCMT();
                        CMTLearnButton.Invoke(new delegateButton(buttonShowClass.ReCMTLearnButton));
                        break;
                    case R_HomeForm.Button.idZigbeeVersionButton:
                        ZigbeeVersionButton.Invoke(new delegateButton(buttonShowClass.ReZigBeeVersionButton));
                        break;
                    default:
                        break;
                }
            }
    

    3.方法调用

    代码如下:

    ShowButton(R_HomeForm.Button.idConTips);
    

    4.定时器和UI刷新

    定时器方法中调用ShowButton(R_HomeForm.Button.idConTips);会很方便地自动刷新控件,所以我们可以用来监听网络状态,监听设备的状态,当计数器等方面。

    总结

    在面对一个Form中有很多控件要进行刷新操作的时候我们可以用这种方法区封装和调用。

    展开全文
  • 主要介绍了C#实现winform用子窗体刷新父窗体及子窗体改变父窗体控件值的方法,涉及C#窗体交互的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • C# Winform频繁刷新导致界面闪烁解决方法
  • listview刷新闪烁解决 public class DoubleBufferListView : ListView { public DoubleBufferListView() { SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles....
  • Install install = new Install(); install.MaximizeBox = false; install.ShowDialog(); ... ocnn = new OleDbConnection...但是第二次更改后就不自己刷新了,还要我手动去点下别内容的才刷新。这是为什么?
  • C#winform界面刷新

    万次阅读 2016-05-30 14:08:02
    本文要实现的功能,是使用C#语言自动刷新页面。这个功能使用Timer可以很容易地实现。这里需要实现的自动刷新功能,要求可以从指定的几种选项里自由设置自动刷新的时间间隔。 我实现的效果如下图,这个DEMO定时...
  • 最近项目用到一个需要实时刷新控件数据的功能,为此我研究了大量的方法,最后选择使用INotifyPropertyChanged类来解决问题,可以大大降低UI层和数据库的压力 让我们项目中的实体类来继承实现INotifyPropertyChanged...
  • 存在这样一种需求:父窗口A创建了子窗口B,B在显示处理的的时候,需要把一些信息的信息刷新到A上,但是WinForm一般不允许直接通过A的对象刷新,况且B都不知道是谁调用的它(不知道父窗口是谁)。 一般利用委托实现 ...
  • 利用委托和事件实现跨窗体刷新 1.子窗体中的代码,我们需要定义一个委托和事件 //定义委托 public delegate void Refresh(); //定义事件 public event Refresh myRefresh; 2.父窗体的代码,我们需要定义一个...
  • protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }需要添加 using System.Windows.Forms; 这
  • 写一个查询导出工具,下拉选择SQL Server和oracle两种数据库进行查询且导出excel文档。 中间发现当选择sql server数据库,在textbox输入各种数据后不提交,重新选择oracle数据库,这些输入的数据还在。...
  • 四、C# winform 局部刷新winform界面程序时,经常会遇到后台处理占用大量时间的情况,这就会造成界面假死状态。一般解决界面假死有两种方式:要么把占用大量时间的处理方式放入其他线程;要么把界面显示放入其他...
  • 以下方法可以成功! @Override public void onClick(View view) { webview.loadUrl(url); webview.loadUrl( [removed][removed].reload( true ) );...补充知识:WebView.loadUrl使用误区 当使用loadUrl加载网页的...
  • 最近做winform页面控件很多,页面第一次载入或者动态禁用、显示时页面闪烁得很厉害;根据网上说的加页面缓存之类的都没什么用,偶然从外国的一个论坛中找到了解决办法,原贴已经找不到了;贴上国外小哥的代码 1 ...
  • 1.其实实现主窗体的刷新无非就是比较简单的调用load事件重新加载数据绑定,但是这样的效果会带来,无状态刷新页面无法保存上一次的页面状态,比如 刷新刷新后 ,如果点击刷新按钮执行的话,那么树形菜单...
  • 昨天同事winform遇到一个问题, 窗体上有一个时间控件,和一堆文本,下拉控件,时间控件是每秒都在动态走的 窗体下发一个DataGridView 控件显示保存后的数据 保存的数据库是在另一台机器B上面 问题:保存之后,...
  • //////弹出窗口/////////privatevoidmiFuncSet_Click(objectsender, RoutedEventArgs e){WinFuncSetting funcSetting=newWinFuncSetting();funcSetting.ChangeTextEvent+=newChangeTextHandler(FuncSettingClosed).....
  • this.DialogResult = DialogResult.OK;//可以理解点击按钮触发从(全局变量中获取enum的定值) if (addForm.ShowDialog() == DialogResult.OK) { LoadData();//刷新dataGridView控件中的数据库内容 } 转载...
  • 1.创建一个TipReFresher类,包含一个Action委托 2.Winform调用
  • 主要是前两天,有个同学问我这个方面的内容,...其中,主窗体负责显示数据,而弹出的子窗体负责添加数据,数据添加完毕,需要刷新主窗体。 父窗体代码如下: usingSystem; usingSystem.Collections.Generic; us...
  • Winform页面同步刷新

    2021-04-15 08:30:12
    [img=https://img-bbs.csdn.net/upload/202104/15/1618446550_748751.png][/img]... 类似于这样的多页面窗体,在一个页面修改数据后,点击其他页面时,其他页面数据也进行实时更新。几个页面之间的数据可能是联动的
  • HTML 页面自动刷新

    千次阅读 2021-06-28 01:38:23
    学习就是一个不断积累的过程,每一天能够学到一点新东西说明自己就在进步...HTML head 里面设置页面自动刷新功能兼容Ie页面2s自动刷新一次代码:DocumentHello worldPHP 页面自动刷新可借助JS来实现,简单示例如下:...
  • 主窗体中添加代码 public ...通过代理调用刷新方法 } else { label_State.Text = " 程序已经运行5秒钟了 " ; } }   转载于:https://www.cnblogs.com/step-city/p/6617632.html
  • 1. 用委托事件实现数据实时推送并刷新页面,适用于前台和后台松耦合但没有分布式部署的情况。 2. 首先定义一个全局的委托事件 public class Notice { public delegate void MessageRecieved(DataTable dt);//...
  • 目前在使用ASP.NET技术做...在这种情况下aspx页面负责显示网页的前端,cs文件负责网页的逻辑处理(及后台),然而,在页面中嵌入javascript也是可以处理相关逻辑的。所以,当遇到一种情况:不需要前端页面,只有后台...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,092
精华内容 1,236
关键字:

winform页面刷新