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

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

        /// <summary>
         /// 禁止点击列表头进行排序
         /// </summary>
         /// <param name="dgv">当前DataGridView控件</param>
         private void DisableSortOrder(DataGridView dgv)
         {
             ; i < dgv.ColumnCount; i++)
             {
                 dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
             }
         }

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

         /// <summary>
         /// 屏蔽双击标题栏变小事件、点击标题栏移动窗口事件
         /// </summary>
         /// <param name="m"></param>
         protected override void WndProc(ref Message m)
         {
             //双击标题栏、移动窗口事件
             if (m.Msg != 0xA3 && m.Msg != 0x0003 && m.WParam != (IntPtr)0xF012)
             {
                 base.WndProc(ref m);
             }

         }

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

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

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

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

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

1.在Program.cs中如下:

  LoginForm lf = new LoginForm();
  lf.ShowDialog();
  if (lf.DialogResult == DialogResult.OK)
       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();

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

 public void test()
 {
     if(ui.InvokeRequired)
     {
       disposeUIinfo disui=new disposeUIinfo(new Action(()=>
       {
             // do something......

        }));
       ui.Invoke(disui);
      }
     else
     {
          //do something......
     }
 }

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

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

 this.StartPosition = FormStartPosition.Manual;
  - , Screen.PrimaryScreen.WorkingArea.Height /  - );

持续更新中......by Shawn Chen 2017.7.24 晚

 

C#、Java中的一些小功能点总结(持续更新......)的更多相关文章

  1. Idea中快捷键与小技巧的总结-->持续更新

    1.Scala类或单例对象中快速声明实例对象: eg. new SparkContext(conf).var 系统会自动提示,可以自动补全,如图: 2.ctrl+i与ctrl+o的区别: ctrl + ...

  2. 网站开发---js与java实现的一些小功能

    记录一下网站开发过程中的一些小功能 1.js获取当前年份: <span>Copyright © 2017-<script>document.write( new Date(). ...

  3. C#、Java中的一些小知识点总结(持续更新......)

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

  4. 自己实现java中Iterator(迭代器功能)

    今天躺在床上忽然想到一个问题,迭代器的代码是如何实现的?于是乎不由自主的爬起来敲两行代码. List<String> list=new ArrayList<>(2); list ...

  5. Java 与 C++ 不一样的地方(持续更新中...)

    本文仅以记录 Java 与 C++ 不同之处,以备随时查询. Java 程序运行机制 Java 是一门编译解释型的语言,即它在运行的过程中既需要编译也需要解释.如下图表示的是 Java 程序运行机制: ...

  6. java中易遗忘的知识,不定时更新……

    如果有人问你: "子类继承父类所有非私有(private)的属性和方法这句话对吗?", 如果你回答对的, 那我只能说too young too simple! 关于代码块和成员变量 ...

  7. java高级&资深&专家面试题-行走江湖必备-持续更新ing

    行走江湖必备一份面试题,这里给大家整理了一套.0面试官最喜欢问的问题或者出场率较高的面试题,助校招或者社招路上的你一臂之力! 首先我们需要明白一个事实,招聘的一个很关键的因素是在给自己找未来的同事,同 ...

  8. iOS --- 总结Objective-C中经常使用的宏定义(持续更新中)

    将iOS开发中经常使用的宏定义整理例如以下,仅包括Objective-C. 而对于Swift,不能使用宏,则能够定义全局函数或者extension.请參考博客iOS - 总结Swift中经常使用的全局 ...

  9. 。Java中的一些小细节

    1.main方法. ------任何一个Java程序都有一个main方法,它是程序的入口. ------当执行  “ java + 类名 “  这个命令时,JVM就会去加载这个类,并且寻找这个类中的m ...

随机推荐

  1. 使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular

    上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from '@an ...

  2. 版本控制之一:SVN服务器搭建与安装(转)

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...

  3. C++ primer第五版随笔--2015年1月6日

    记录自己看这本书时的一些内容. 一.引用(reference) 引用为对象起了另外一个名字.例如: int ival=1024: int &relVal1=ival;//对,注意尽量不要用这方 ...

  4. 数据结构--KMP算法总结

    数据结构—KMP KMP算法用于解决两个字符串匹配的问题,但更多的时候用到的是next数组的含义,用到next数组的时候,大多是题目跟前后缀有关的 . 首先介绍KMP算法:(假定next数组已经学会, ...

  5. YARN到底是怎么一回事?

    文章思路: 首先提出第一代MRv1(MapReduce Version1.0)的局限性,然后解释YARN是怎么克服这些局限性的,接着说了YARN的编程模型,说了YARN的组成,YARN的通信协议和YA ...

  6. canvas图形编辑器

    原文地址:http://jeffzhong.space/2017/11/02/drawboard/ 使用canvas进行开发项目,我们离不开各种线段,曲线,图形,但每次都必须用代码一步一步的实现.有没 ...

  7. 状态码为 200 from cache和304 Not modified的区别

    1.请求状态码为 200  from cache: 表示该资源已经被缓存过,并且在有效期内,所以不再向浏览器发出请求,直接使用本地缓存. 如下图: 2.状态码为 304 Not modified: 表 ...

  8. Ubuntu 共享 转载

    Ubuntu 14.04 文件服务器--samba的安装和配置 听语音 | 浏览:29526 | 更新:2014-10-10 22:28 | 标签:ubuntu 1 2 3 4 5 6 7 分步阅读 ...

  9. 动态代理:JDK动态代理和CGLIB代理的区别

    代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法.实际执行的是被代理类的方法. 而AOP,是通过动态代理实现的. 一.简单来说: JD ...

  10. Promise同时进入catch和then——踩坑

    记录今天使用Promise遇到的一个坑--在resolve()返回运行then之后,函数又进入到了catch,源代码大意如下: var pro = function() { return new Pr ...