• 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日, 晚。

  • 相关阅读:
    按分类统计商品总数的性能优化思考
    Flash/Flex学习笔记(52):使用TweenLite
    Flash/Flex学习笔记(36):自己动手实现一个滑块控件(JimmySilder)
    解决JQuery中的ready函数冲突
    Flash/Flex学习笔记(41):碰撞检测
    Flash/Flex学习笔记(34):AS3中的自定义事件
    如何改变AspNetPager当前页码的默认红色?
    Flash/Flex学习笔记(42):坐标旋转
    Flash/Flex学习笔记(39):弹性运动
    C#检测SqlServer中某张表是否存在
  • 原文地址:https://www.cnblogs.com/developer_chan/p/7147964.html
Copyright © 2020-2023  润新知