• winform知识


    控件相关

    1.文本框/label高度

      文本框Multiline属性,设为true就可以了。改完高度后再将此属性改回来,要不然多行文本框,按回去就去下一行了。

      label的改autoSize属性,设为false就可以了。

    2.控件中文字居中

      TextAlign属性:MiddleCenter

     3.颜色属性

      直接输入 #xxxx

     

    4.如何去掉button按钮的边框线

      设置FlatStyle为Flat,并且设置FlatAppearance下的BorderSize为0。将按钮所在的容器的底色和按钮颜色设置为不同的。

    5.ComboBox

      下拉列表的高度通过字体大小来改变,微软雅黑,12pt(小四)

      DrawMode 默认设置为normal就好,设置为 OwnerDrawVariable,高度可变,但是此时下拉列表的值为不可见的(尽管存在)。

    6.DataGridView 

    • 宽度和字体

      显示宽度属性:AutoSizeColumnsMode:AllCells

    或者设置高度小一点:

    字体:columnHeadersDefaultCellStyle、DefaultCellStyle

    • 类型checkboxColumn的选中

      首先DataGridView必须设置可编辑。

    1、用DataGridViewRow.Cells[0].EditedFormattedValue.ToString()=="True"

    不用FormattedValue,它是操作提交后的结果,而EditedFormattedValue是当前的结果,不管结果是否已经提交。
    2、DataGridViewCheckBoxColumn设置CheckBox默认选中

    ((DataGridViewCheckBoxCell)dgvDownloadList.Rows[i].Cells["Column1"]).Value = true;

    3、设置是否选中

    dataGridViewSiteInfo.Rows[i].Cells[0].Value  = "True";

    http://blog.csdn.net/wzy0754/article/details/52368377

    •  单击DataGridView中一单元格后立即进入编辑状态

    将datagridview1的SelectionMode设置为FullRowSelect(某一行全选中),

    在双击事件中代码如下

    private void datagridview1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    { this.datagridview1.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly = false;//将当前单元格设为可读

    7.datetimepicker初始为空值的方法

    方法一:

    在窗口初始化函数中添加,并在日期改变事件里定义格式:

    dateTimePickerEnd.Format = DateTimePickerFormat.Custom;
    dateTimePickerEnd.CustomFormat = " ";
    
    private void dateTimePickerEnd_ValueChanged(object sender, EventArgs e)
    {
    dateTimePickerEnd.CustomFormat =  "yyyy-MM-dd HH:mm:ss";
    }
    View Code

    方法二:

    在日期控件上面覆盖一个文本框,然后初始化时候文本框是空值,每次日期选择之后将值赋在文本框里面。

    窗体属性

    1. 窗体不加边框

    this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
    this.StartPosition = FormStartPosition.CenterScreen;

    2. 窗体只显示一个

    static formDevice _formDevice;
     if(_formDevice==null||_formDevice.IsDisposed )
                {
                    _formDevice = new formDevice();
                    _formDevice.Show();
                }
                else
                {
                    _formDevice.WindowState = FormWindowState.Normal;
                    _formDevice.Activate();
                }

    程序启动【单例】

    //获取欲启动进程名
    string strProcessName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
                ////获取版本号
                //CommonData.VersionNumber = Application.ProductVersion;
                //检查进程是否已经启动,已经启动则显示报错信息退出程序。
                if (System.Diagnostics.Process.GetProcessesByName(strProcessName).Length > 1)
                {
                    MessageBox.Show("程序已经运行!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    Application.Exit();
                    return;
                }

    EXE 图标修改问题

    1、窗体属性中找到Icon,单击最右侧的“…”按钮,选择备好的ico图标。【这时窗体图标已经变化了,这是程序内部显示图标的修改方法】

    2、程序外部图标的修改方法

    右击项目名称,在下拉列表中选择“属性”,

    会发现生成的bin目录下的exe图标已经发生变化了。

    3、修改ico文件,却发现生成的exe图标未发生变化。重新生成项目也一样,清理后再生成也一样

    网上看到的解决方案是:

    可能是资源管理器的问题,估计它是有一个缓存,所以在资源管理器中总是显示原来那个图标, 我把这个EXE文件拷到其他文件夹下,图标就正确显示了。 

    还有,你也可以按住CTRL+滚动鼠标  改变图标的大小(文件的大图标显示和小图标显示),这时你也可以观察到已经改变的图标

    C#界面假死问题

      当一个WinForm程序在事件函数中进行IO操作、网络操作或耗CPU大的操作时,窗体会出现明显的卡顿现象。原因在于窗体的消息循环被耗时的操作停住了,UI线程被阻塞。在相关操作没有完成之前,用户不能对窗体进行任何的操作,包括关闭应用程序。

      解决思路是——能不能将阻塞线程的操作在另外一个线程中执行,这样就不会堵塞UI线程

           然而从另外一个线程操作windows窗体上的控件,就会和主线程产生竞争,造成不可预料的结果。因为windowsGUI编程有一个规则,就是只能通过创建控件的线程来操作控件的数据

           好在因此Control类实现了ISynchronizeInvoke接口,提供了Invoke和BeginInvoke方法来提供让其它线程更新GUI界面控件的机制

           两者区别是:Invoke,需要等待委托的方法执行返回后才执行下面的代码;begininvoke则不需要。

            private void buttonX1_Click(object sender, EventArgs e)  
            {
                Waitting waitting = new Waitting();  
                waitting.Show();  
                Task.Factory.StartNew(() => // 将阻塞线程的操作在另外一个线程中执行,这样就不会堵塞UI线程。   
                {   
                    ConnectSDE(); //运行时间5s左右
                    MessageBox.Show("连接SDE数据库成功", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);  
                    waitting.BeginInvoke((Action)waitting.Close);//BeginInvoke方法返回UI线程更新UI界面控件的机制。   
                });  
            }
    View Code

    参考:解决C#界面假死问题

  • 相关阅读:
    C++STL——vector
    大数常用计算模板及例题
    在线算法&离线算法
    线段树——hdu1166敌兵布阵
    C++STL——堆栈
    C++STL——优先队列
    C++STL——队列
    图的建立——图的两种存储结构
    Manacher算法——最长回文子串
    HttpClient的几个实现类
  • 原文地址:https://www.cnblogs.com/peterYong/p/8603788.html
Copyright © 2020-2023  润新知