C#、Java中的一些小功能点总结(持续更新......)
前言:在项目中,有时候一些小的功能点,总是容易让人忽略,但是这些功能加在项目中往往十分的有用,因此笔者在这里总结项目中遇到的一些实用的小功能点,以备用,并持续更新......
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中的一些小功能点总结(持续更新......)的更多相关文章
- Idea中快捷键与小技巧的总结-->持续更新
1.Scala类或单例对象中快速声明实例对象: eg. new SparkContext(conf).var 系统会自动提示,可以自动补全,如图: 2.ctrl+i与ctrl+o的区别: ctrl + ...
- 网站开发---js与java实现的一些小功能
记录一下网站开发过程中的一些小功能 1.js获取当前年份: <span>Copyright © 2017-<script>document.write( new Date(). ...
- C#、Java中的一些小知识点总结(持续更新......)
前言:在项目中,有时候一些小的知识,总是容易让人忽略,但是这些功能加在项目中往往十分的有用,因此笔者在这里总结项目中遇到的一些实用的小知识点,以备用,并持续更新...... 1.禁用DataGridV ...
- 自己实现java中Iterator(迭代器功能)
今天躺在床上忽然想到一个问题,迭代器的代码是如何实现的?于是乎不由自主的爬起来敲两行代码. List<String> list=new ArrayList<>(2); list ...
- Java 与 C++ 不一样的地方(持续更新中...)
本文仅以记录 Java 与 C++ 不同之处,以备随时查询. Java 程序运行机制 Java 是一门编译解释型的语言,即它在运行的过程中既需要编译也需要解释.如下图表示的是 Java 程序运行机制: ...
- java中易遗忘的知识,不定时更新……
如果有人问你: "子类继承父类所有非私有(private)的属性和方法这句话对吗?", 如果你回答对的, 那我只能说too young too simple! 关于代码块和成员变量 ...
- java高级&资深&专家面试题-行走江湖必备-持续更新ing
行走江湖必备一份面试题,这里给大家整理了一套.0面试官最喜欢问的问题或者出场率较高的面试题,助校招或者社招路上的你一臂之力! 首先我们需要明白一个事实,招聘的一个很关键的因素是在给自己找未来的同事,同 ...
- iOS --- 总结Objective-C中经常使用的宏定义(持续更新中)
将iOS开发中经常使用的宏定义整理例如以下,仅包括Objective-C. 而对于Swift,不能使用宏,则能够定义全局函数或者extension.请參考博客iOS - 总结Swift中经常使用的全局 ...
- 。Java中的一些小细节
1.main方法. ------任何一个Java程序都有一个main方法,它是程序的入口. ------当执行 “ java + 类名 “ 这个命令时,JVM就会去加载这个类,并且寻找这个类中的m ...
随机推荐
- 使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular
上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from '@an ...
- 版本控制之一:SVN服务器搭建与安装(转)
Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...
- C++ primer第五版随笔--2015年1月6日
记录自己看这本书时的一些内容. 一.引用(reference) 引用为对象起了另外一个名字.例如: int ival=1024: int &relVal1=ival;//对,注意尽量不要用这方 ...
- 数据结构--KMP算法总结
数据结构—KMP KMP算法用于解决两个字符串匹配的问题,但更多的时候用到的是next数组的含义,用到next数组的时候,大多是题目跟前后缀有关的 . 首先介绍KMP算法:(假定next数组已经学会, ...
- YARN到底是怎么一回事?
文章思路: 首先提出第一代MRv1(MapReduce Version1.0)的局限性,然后解释YARN是怎么克服这些局限性的,接着说了YARN的编程模型,说了YARN的组成,YARN的通信协议和YA ...
- canvas图形编辑器
原文地址:http://jeffzhong.space/2017/11/02/drawboard/ 使用canvas进行开发项目,我们离不开各种线段,曲线,图形,但每次都必须用代码一步一步的实现.有没 ...
- 状态码为 200 from cache和304 Not modified的区别
1.请求状态码为 200 from cache: 表示该资源已经被缓存过,并且在有效期内,所以不再向浏览器发出请求,直接使用本地缓存. 如下图: 2.状态码为 304 Not modified: 表 ...
- Ubuntu 共享 转载
Ubuntu 14.04 文件服务器--samba的安装和配置 听语音 | 浏览:29526 | 更新:2014-10-10 22:28 | 标签:ubuntu 1 2 3 4 5 6 7 分步阅读 ...
- 动态代理:JDK动态代理和CGLIB代理的区别
代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法.实际执行的是被代理类的方法. 而AOP,是通过动态代理实现的. 一.简单来说: JD ...
- Promise同时进入catch和then——踩坑
记录今天使用Promise遇到的一个坑--在resolve()返回运行then之后,函数又进入到了catch,源代码大意如下: var pro = function() { return new Pr ...