zoukankan      html  css  js  c++  java
  • C#、Java中的一些小知识点总结(持续更新......)

    前言:在项目中,有时候一些小的知识,总是容易让人忽略,但是这些功能加在项目中往往十分的有用,因此笔者在这里总结项目中遇到的一些实用的小知识点,以备用,并持续更新......


    1.禁用DataGridView表头的排序功能

     1        /// <summary>
     2         /// 禁止点击列表头进行排序
     3         /// </summary>
     4         /// <param name="dgv">当前DataGridView控件</param>
     5         private void DisableSortOrder(DataGridView dgv)
     6         {
     7             for (int i = 0; i < dgv.ColumnCount; i++)
     8             {
     9                 dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
    10             }
    11         }

    2.屏蔽双击标题栏窗口变小、点击标题栏移动窗口事件

     1         /// <summary>
     2         /// 屏蔽双击标题栏变小事件、点击标题栏移动窗口事件
     3         /// </summary>
     4         /// <param name="m"></param>
     5         protected override void WndProc(ref Message m)
     6         {
     7             //双击标题栏、移动窗口事件
     8             if (m.Msg != 0xA3 && m.Msg != 0x0003 && m.WParam != (IntPtr)0xF012)
     9             {
    10                 base.WndProc(ref m);
    11             }
    12 
    13         }

    注:在不需要移动的窗口中添加上述代码,其他具体消息,可查询相关资料,进行控制。

           m.Msg = 0xA3  -> 双击标题栏消息

           m.Msg = 0x0003 && m.WParam = (IntPtr)0xF012 -> 移动窗体消息

    3. 登录时,当正确输入口令后,关闭登录窗口

        注:这个功能其实还比较重要,因为如果我们直接this.hide()或this.close()是不行的,这是就需要一个小技巧进行控制,具体如下代码:

       1.在Program.cs中如下:

    1  LoginForm lf = new LoginForm();
    2  lf.ShowDialog();
    3  if (lf.DialogResult == DialogResult.OK)
    4       Application.Run(new SelectItemForm());

     2.然后在登录窗口中,当登录成功后进行如下控制:

           this.DialogResult = DialogResult.OK;
           this.Close();

    通过以上两步就可以实现关闭登录界面,从而转到所需的主界面中。

    4.在使用datagridview进行数据绑定的时候,第一次进入界面数据加载很慢,起初以为是sql语句或者DataSource绑定的问题,但是通过打印运行时间,发现花费时间不到1s。但是笔者在使用使用datagridview控件同时,界面上还有许多其他的控件,并且数据加载时候总是第一次很慢,后面就不会出现该情况,于是想到先加载控件,然后再进行数据的加载,因此通过一个线程进行数据的加载,并配合loading框,这样就可以达到先把其他控件显示出来,然后再进行数据显示,就不会出现那种生硬的数据加载形式,给用户一个友好的界面。

    5.接4问题,原来使用数据绑定时,datagridview中的表头的显示文本来自于数据库中的列名,但在4问题中因为是延迟加载,所以datagridview会有一个短暂的空表头形式,给人不友好的显示,于是想到给datagridview一个固定的列名称,然后进行对应的加载即可。具体做法:在datagridview属性中点击Columns集合,将每一列要显示的值与查询出来的字段进行绑定即可。通过4和5就可以实现一个延迟加载,先加载控件,然后在进行数据的加载,而不是等待数据控件加载完后,在加载其他控件,这样会造成一种非常不友好的界面响应。

    6.在winform中,线程间调用控件,笔者喜欢使用委托进行相关调用,具体如下:

    首先定义一个处理ui控件的委托 public delegate void  disposeUIinfo();

     然后在具体函数中利用匿名委托进行相关调用:

     1 public void test()
     2 { 
     3     if(ui.InvokeRequired)
     4     {
     5       disposeUIinfo disui=new disposeUIinfo(new Action(()=>
     6       { 
     7             // do something......
     8        
     9        }));
    10       ui.Invoke(disui);
    11      }
    12     else
    13     {
    14          //do something......
    15     }
    16 }

    注:这里使用了Action和Lambda表达式。

    7.在WinForm中由于调用的封装的UI控件,导致无论怎么设置窗体的位置都不能居中,可以在窗体的构造函数中加入如下代码即可居中:

    1 this.StartPosition = FormStartPosition.Manual;
    2 this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - this.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - this.Height / 2);

    持续更新中......

    by Shawn Chen 2017.7.24日, 晚。

  • 相关阅读:
    mysql常用基本命令
    mysql8.0.13下载与安装图文教程
    k8s ingress 增加跨域配置
    Jenkins 备份恢复插件 thinBackup 使用
    k8s HA master 节点宕机修复
    nginx 跨域问题解决
    mongodb 3.4.24 主从复制
    k8s 线上安装 jenkins并结合 jenkinsfile 实现 helm 自动化部署
    k8s helm 运用与自建helm仓库chartmuseum
    centos6 源码安装 unzip
  • 原文地址:https://www.cnblogs.com/developer_chan/p/7147964.html
Copyright © 2011-2022 走看看