c#窗体开发

奇:
常用控件的使用(期间参杂着VS快捷键/常用设置)

快捷键:引用命名空间:shift+alt+F10

断点:F9

调试:F5

逐句调试(每行代码一次跳转):F11

逐过程调试:F10

重构提取方法:选中要重构的方法  ctrl+r  ctrl+m  输入方法  确定

新建dll类库: 解决方案资源管理器--解决方案--右键--新建项目--选择--类库(.net Framework)会提示是.dll类库啊,不要选错了

选中后取名CarHOmeDLL  确定后文件位置如下:

 

引用类库方式:

 工程引用:好处

DLL引用

 

浏览找到并选中DLL文件在确定

 (红框)第一个是工程引用第二个是dll引用

组件:
公共控件:

WinForm 窗体
  Button           按钮
  ComboBox         select下拉列表框    选中它单机三角图标编辑页或者在属性面板的数据Items中添加option(DataSource是数据绑定项)
  Checkbox         复选框
  CheckedListBox   复选框列表(一个组垂直包含个checkbox多选框)
  DateTimePicker   日期时间控件
  GroupBox         分组控件
  Label            标签
  LinkLabel
  ListBox          多选列表框
  ListView         列表控件(多作为表格展示 先设置编辑列 行为的HeaderStyle:选择是否能点击  ;  外观的View:显示模式【一般选Details详细模式来显示表格】) 
  LinkLabel        超链接标签
  MaskedTextBox
  MonthCalendar
  NotifyIcon       托盘控件
  NumericUpDown    数字输入框
  PictureBox       图片框
  ProgressBar      进度条
  RadioButton      单选框
  RichTextBox
  TreeView         树控件
  Textbox          文本框
  ToolTip          气泡提示
  webBrowser

容器:

Panel                   面板
SplitContainer          分隔容器
TabControl              选项卡控件(tab页)
FlowLayoutPanel
GroupBox
tableLayoutPanel

ta'btabControl

//窗体初始化

默认显示第几个   
tabControl1.SelectedIndex = 0;
//Alignment: 调节tab显示在上下左右的位置

菜单和工具栏:

ContextMenuStrip         右键菜单
MenuStrip                菜单控件(类似导航)
StatusStrip              状态栏控件
ToolStrip                工具栏控件
ImageList                图片集合   ????(4.7版本未找到)
Timer                    时间控件

对话框:

FolderBrowserDialog         文件夹选择
OpenFileDialog              打开文件
SaveFileDialog              保存文件

数据

Chart
BindingNavigator
BindingSource
DataGridView
DataSet

组件

BackgroundWorker
DirectoryEntry
DirectorySearcher
ErrorProvider
Eventlog
FilesystemWatcher
CHelpProvider
ImageList
MessageQueue
PerformanceCounter
Process
SerialPort
ServiceController
Timer

窗体属性面板:

布局
--AuteScaleMode               自动缩放模式
--Autoscroll                  自动滚动
--AltoScrollMargin            自动滚动边距
--AutoScrollMinsize           自动滚动最小尺寸
--AutoSize                    自动大小
--AutoSizeMode                拖动窗口改变大小开关
--Location                    位置
--MaximumSize                 最大尺寸
--MinimumSize                 最小尺寸
--Padding                     是布局还是内边距?
--Size                        字体大小?
--StartPosition               启动窗体出现的位置
--Windowstate                 窗口状态

窗口样式(WindowStyle)
--ControlBox                  控制按钮组
--HelpButton                  帮助按钮
--lcon                        图标
    -size
--IsMdiContainer              是不是MDI容器
--MainMenuStrip               主菜单条
--MaximizeBox                 窗口最大化
--MinimizeBox                 窗口最小化
--Opacity                     不透明度
--Showlcon                    显示图标
--ShowlnTaskbar               在任务栏中显示
--SizeGripStyle               大小手柄样式
--TopMost                     是否为最顶层元素
--TransparencyKey             透明色
行为
--AllowDrop                          允许拖放
--AutoValidate                       自动验证
--ContextMennuStrip                  上下文菜单条
--DoubleBuffered                     双缓冲
--enabled                            可用
--ImeMode                            输入法模式
焦点(Focus)
--CausesValidation                   是否触发验证
可访问性(Accessibility)
--AccessibleDescription              可访问描述
--AccessibleName                     可访问名称
--AccessibleRole                     可访问角色
设计
(Name)                              默认Form1     对应  this.Name = "帝国标签窗口";  (这个自动生成窗口事件函数名时会取它的值;值_事件名)
language                             语言
Localizable                          本地化 
locked                               锁定  
数据
--(ApplicationSettings)
    --(PropertyBinding)
    --Location
    --Text
--(DataBindings)                     数据绑定
    --(Advanced)
    --Tag
    --Text
--Tag
外观(Appearance)
--BackColor                  背景颜色
--Backgroundlmage            背景图片
--BackgroundImageLayout      背景图片布局
--Cursor                     光标选择
--Font
--Name:宋体
--Size
--Unit
--Bold
--GdiChartSet
--GdVerticalFont
--GdiVerticalFont
--Italic
--Strikeout
--Underline --ForeColor --FormBorderStyle 字体边框样式 --RightToLeft 从右到左 --RightToLeftLayout 从右到左布局 --Text 窗口标题 对应 this.Text = "帝国cms标签"; --UseWaitCursor 用户等待光标 杂项 --AcceptButton 接受按钮 --CancelButton 取消按钮 --KeyPreview 键预览 --tooltip1上的ToolTip

 窗体组件属性面板:

TabIndex   设置按下tab键时跳转的顺序 对表单组件特别有用

窗体事件:

布局:
DpiChanged
DpiChangedAfterParent
DpiChangedBeforeParent
Layout                      布局
MdichidActivate             MDI 子窗口行为
Move                        移动             在移动控件时发生。(从 Control 继承。) 
PaddingChanged              边框更改          在控件空白区更改时发生。(从 Control 继承。)
Resize                      重置大小          在调整控件大小时发生。(从 Control 继承。)

操作
Click                 单击        在单击控件时发生。(从 Control 继承。)
Doubleclick           双击
MouseCaptureChanged   鼠标捕获更改  当控件失去鼠标捕获时发生。(从 Control 继承。)
MouseClick            鼠标单击     在鼠标单击该控件时发生。(从 Control 继承。)
MouseDoubleClick      鼠标双击     当用户使用鼠标双击 RadioButton 控件时发生。
ResizeBegin           重置尺寸开始
ResizeEnd             重置尺寸结束
Scroll                滚动

行为
ChangeUICues                   更改界面提示  在焦点或键盘用户界面 (UI) 提示更改时发生。(从 Control 继承。)
ControlAdded                   控制已加入   在将新控件添加到 Control.ControlCollection 时发生。(从 Control 继承。)
ControlRemoved                 控制已移除    在从 Control.ControlCollection 移除控件时发生。(从 Control 继承。) 
FormClosed                    (点击X,直接结束进程不会触发)关闭窗体事件发生在FormClosing之后
FormClosing                   (点击x,直接结束进程不会触发)关闭窗体
HelpButtonClicked              帮助按钮已点击        
HelpRequested                  帮助已请求
ImeModeChanged                 输入法模式已更改    当 ImeMode 属性更改时发生。此事件与此类无关。(从 ButtonBase 继承。)
InputLanguageChanged           输入语言已更改
InputLanguageChanging          输入语言准备更改
Load                           窗体初始化:
执行步骤program.cs的Main方法执行Application.Run(new Form1());然后调用Form1.cs中的Form1->Form1()析构函数中的InitializeComponent(){ this.Load += new System.EventHandler(this.Form1_Load);}最后调用Form1_Load() QueryAccessibilityHelp 查询访问帮助 在 AccessibleObject 为辅助功能应用程序提供帮助时发生。(从 Control 继承。)  Shown 展示 在控件样式更改时发生。(从 Control 继承。)  StyleChanged 样式已更改 系统颜色更改时发生。(从 Control 继承。)  SystemColorsChanged 系统颜色更改 按键
KeyDown 按键按下瞬间 KeyPress 按键按住 KeyUp 按键抬起瞬间 PreviewKeyDown 预览键按下 在焦点位于此控件上的情况下,当有按键动作时发生(在 KeyDown 事件之前发生)。(从 Control 继承。)  焦点 Activated 活动   Deactivate 非活动 Enter 进入 Leave 离开 Validated 已验证 在控件完成验证时发生。(从 Control 继承。) Validating 验证中 属性已更改 AutoSizeChanged 当 AutoSize 属性的值更改时发生。(从 ButtonBase 继承。)  AutoValidateChanged BackColorChanged 当 BackColor 属性的值更改时发生。(从 Control 继承。) BackgroundlmageChanged 当 BackgroundImage 属性的值更改时发生。(从 Control 继承。)  BackgroundlmageLayoutChanged 当 BackgroundImageLayout 属性更改时发生。(从 Control 继承。)  BindingContextChanged 当 BindingContext 属性的值更改时发生。(从 Control 继承。)  CausesValidationChanged 当 CausesValidation 属性的值更改时发生。(从 Control 继承。) ClientSizeChanged 当 ClientSize 属性的值更改时发生。 (从 Control 继承。) ContextMenuStripChanged 当 ContextMenuStrip 属性的值更改时发生。 (从 Control 继承。) CursorChanged 当 Cursor 属性的值更改时发生。(从 Control 继承。) DockChanged 当 Dock 属性的值更改时发生。(从 Control 继承。) EnabledChanged 在 Enabled 属性值更改后发生。(从 Control 继承。) FontChanged 在 Font 属性值更改时发生。(从 Control 继承。)  ForeColorChanged 在 ForeColor 属性值更改时发生。(从 Control 继承。) LocationChanged 在 Location 属性值更改后发生。(从 Control 继承。) MaximizedBoundsChanged MaximumSizeChanged   ParentChanged 在 Parent 属性值更改时发生。(从 Control 继承。) RegionChanged 当 Region 属性的值更改时发生。(从 Control 继承。)  RightToLeftChanged 在 RightToLeft 属性值更改时发生。(从 Control 继承。)  RightToLeftLayoutChanged SizeChanged 在 Size 属性值更改时发生。(从 Control 继承。) TextChanged 在 Text 属性值更改时发生。(从 Control 继承。)  VisibleChanged 在 Visible 属性值更改时发生。(从 Control 继承。) 鼠标 MouseDown 鼠标按下 当鼠标指针位于控件上并按下鼠标键时发生。(从 Control 继承。) MouseEnter 鼠标进入 在鼠标指针进入控件时发生。(从 Control 继承。) MouseHover 鼠标移入 在鼠标指针停放在控件上时发生。(从 Control 继承。)  MouseLeave 鼠标离开 在鼠标指针离开控件时发生。(从 Control 继承。)  MouseMove 鼠标移动 在鼠标指针移到控件上时发生。(从 Control 继承。)  MouseUp 鼠标抬起 在鼠标指针在控件上并释放鼠标键时发生。(从 Control 继承。) 
MouseWheel????? 在移动鼠标轮并且控件有焦点时发生。(从 Control 继承。)
数据 (DataBindings) 数据绑定 --CollectionChanged --CollectionChanging 拖放 OragDrop 拖放 OragEnter 拖放进入 OragLeave 拖放离开 DragOver 拖放经过 GiveFeedback 给予反馈 QueryContinueDrag 查询继续拖动 在拖放操作期间发生,并且允许拖动源确定是否应取消拖放操作。(从 Control 继承。) 外观 Paint 在重绘控件时发生。(从 Control 继承。) 



TabIndexChanged           在 TabIndex 属性值更改时发生。(从 Control 继承。) ????????
TextChanged             在 Text 属性值更改时发生。(从 Control 继承。)

初始:

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>

cs

namespace WindowsFormsApp2
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(800, 450);
            this.Text = "Form1";
        }

        #endregion
    }
}

program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

Accessibility:可访问

AccessibleDescription::可访问描述

AccessibleName:可访问名称

AccessibleRole:可访问角色

 添加资源:右键双击红框项

笔记:

窗体
怎么修改标题 :外观--Text属性即可.

怎么修改左上角图标 :   窗口样式->ICON属性  图标最合适的大小 32*32

窗体出现的位置:布局--StartPosition


StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
固定窗体的大小(不允许修改窗体大小)
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 不允许修改窗体大小[GrowOnly(默认)]

是否有最大化,最小化.
this.MaximizeBox = false;

按钮
基本特性:
鼠标滑过(按钮获取焦点)时,按钮的背景色发生改变(浅蓝色)[原始状态为灰色]
鼠标"左键"按下时,按钮背景色为深蓝色,鼠标弹起时,变为浅蓝色

控件都会有Enable属性.标示当前控件是否允许使用.如果不想对其操作,那么Enable属性设置为False;

MouseClick与Click
共同点: 都会接受鼠标左键单击事件.并且具有共同信息(鼠标单击的位置(x/y坐标),鼠标按下的键,按下次数);
不同点: MouseClick 会接受鼠标其他按键,click不会.[其他按键:右键/中键/其他](button比较特殊,仅接受鼠标左键.)

下拉列表框 ComboBox
快速监视快捷键:Ctrl+d+q

text 属性获取的数据为控件显示的内容.
SelectedItem 是获取当前选择的对象.
如果当前DropDownStyle 为DropDown时,可以更改下拉框中的内容.那么将会引发使用SelectedItem的null异常.
为了避免用户修改,我们一般会设置如果当前DropDownStyle为如果当前DropDownList

如果需要做一个联动的逻辑.
首先获取 cmb1 选择的数据
然后设置 cmb2 选择的项目.

二级联动

using System;
using System.Windows.Forms;
using System.Collections.Generic;
namespace WindowsFormsApp2
{
    public partial class 帝国标签窗体 : Form
    {
        public 帝国标签窗体()
        {
            InitializeComponent();
        }
        Dictionary<string, string> dic = new Dictionary<string, string>();
        private void 帝国标签窗体_Load(object sender, EventArgs e)
        {
            //窗体初始化
            /*
            cmb下拉框.SelectedIndex = 0;//默认选中第一个
            cmb下拉框.Items.Add("我");
            cmb下拉框.Items.Add("like");
            string[] strs = new string[] {"a","b" ,"c"};
            cmb下拉框.Items.AddRange(strs);

           */
            dic.Add("北京", "海淀,通州,朝阳");
            dic.Add("上海", "普陀区,闵行区,陆家嘴");
            foreach (var item in dic.Keys)
            {
                cmb下拉框.Items.Add(item.ToString());
            }
            cmb下拉框.SelectedIndex = 0;//默认选中第一个
        }


        private void Button1_Click(object sender, EventArgs e)
        {
            //获取下拉框数据
            string textstr = cmb下拉框.Text;
            object obj= cmb下拉框.SelectedItem;
            string str = cmb下拉框.SelectedText;
            object obj2 = cmb下拉框.SelectedValue;
        }

        private void Cmb下拉框_SelectedIndexChanged(object sender, EventArgs e)
        {
            //清空原有数据
            cmb下拉框2.Items.Clear();
            //获取选中项
            string selecttext = cmb下拉框.SelectedItem.ToString();
            //使用选中项目获取dic中的value
            string strvalue = dic[selecttext];
            string[] strs = strvalue.Split(',');
            cmb下拉框2.Items.AddRange(strs);
            cmb下拉框2.SelectedIndex=0;
        }
    }
}
View Code

 窗体初始化时获取所有下拉列表的选项值

            ArrayList al = new ArrayList();
            foreach (string item in this.comboBox2.Items)
            {
                Console.WriteLine(item);
                al.Add(item);
            }
View Code


Dictionary<string, string> dic = new Dictionary<string, string>();
--------------------------------------------------------------------
/*string[] strs= new string[3];
* strs[0]="窗体";
* strs[1]="修炼";
* 与下面等价
*
*string[] strs= new string[] { "窗体", "修炼", "手册" }; 初始化器
*cmb下拉框.Items.AddRange(strs);
* 与下面是等价
*
*cmb下拉框.Items.AddRange(new string[] { "窗体", "修炼", "手册" });
*/

文本框 textbox
让文本允许多行 MultiLine属性设置为true即可,多行后不支持ctrl+a进行全选(单行时支持)
让文本右侧出现滚动滑块 设置ScrollBars属性为Both即可. (Vertical 仅显示垂直滑块,Both则还会显示横向滑块.) 只有设置Dock属性后才会出现横向滑块
将文本框内容显示为*号. 设置PasswordChar属性为*即可.设置属性后还是可以获得原始内容.
不仅仅局限于*可设置为其他单字符
1.密码类型的文本框不允许复制其中内容.
2.只允许设置单行文本框时.
需要文本只读时,请设置ReadOnly为true.
与Enable的区别:
1.readonly允许复制内容.enable不允许
2.vs中re后可以直观的看见变成灰色.en只有运行后才可以看见

TextChanged事件获取的是文本框内所有内容,并非每次按键触发的单独内容.
AppendText的方法:追加文本,在末尾追加新的数据
TextLength 当前文本内容的长度(个数);

复选框(Checkbox)
Checked属性,标记当前复选框状态(选中时为True否则False)
ThreeState 会提供三种选中状态
根据CheckState来判断(Checked[选中] , Unchecked[没选中] , Indeterminate[树结构时,会出现的一种状态,表示当前树结构下有一个或多个子项(并不是所有子项)被选中])

CheckedChanged 事件:指示当前控件是否被选中


思路步骤:
1.需要在窗体加载完成时获取所有的checkbox.
1.使用name(如果控件很多时,这就是一个噩梦般的方法)
2.使用this.Controls获取所有的CheckBox
2.对这些checkbox完成事件的赋值.

单选框(RadioButton)笔记
希望使用单独功能时,才选择这个控件,如果希望多个功能请使用CheckedBox

Checked 属性:True被选中否则False.
RadioButton 有区域特性,需要使用其他控件进行分隔.
如果不去添加区域(GroupBox)时,它针对真个窗体为一个区域
GroupBox
使用GpBox时内部的控件不会根据Gp的大小改变而改变(如果缩小GP,那么内部控件将被遮挡);
作用1: 当做RadioButton的选项区域
作用2: 划分控件区域
作用3: 美化

Dock 属性. 作为基本布局.
可以让控件完全贴靠某一个方向(上下左右),或者铺满整个容器

置于底层与置于顶层的作用.

标签(Label)
大部分时候的作用就是当做显示/提示
一些需要使用链接时,使用标签替代
linkLabel 与Label 是一样的功能,提供显示或者提示的功能.

区别: LinkLable有点击时/点击后的视觉特效

实现一个简单的登录 思路
给登录按钮绑定一个Click事件
登录过程:
1.获取用户名,获取密码
2.比对用户名密码
3.对登录结果进行显示(labres.Text = 登录结果)

列表框(ListBox)
SelectionMode = SelectionMode.MultiExtended; 多选(可以使用Shift/Ctrl/鼠标拖选)

山寨思路
选择项目山寨
设置SelectionMode为One(单选)
添加选中事件

 

图片框(PictureBox)
设置Image 属性来完成对图片框的图像进行初始化

SizeMode会调整当前图像显示的方式
Normal 不做任何效果(只会显示出图片框大小范围内的图片信息)
StretchImage 铺满整个图片控件(加载验证码时一般会使用这个模式)
AutoSize 自动控制大小(控件的大小会随着图片的大小而变化)[Dock属性是不会被齐影响]
CenterImage 仅在图片中间居中,显示大小跟随控件大小
Zoom 缩放图片,居中显示

实现读取本地文件思路
读取图片
先获取文件路径
将这个图片读取成Image对象
pic.Image = Image对象.



OpenFileDialog 打开文件对话框
Filter 属性 设置文件筛选(图片文件|*.jpg|所有文件|*.*)
DefaultExt 默认后缀名
FileName 获取当前选中的文件
FileNames 获取多个选中的文件

//一定要添加对ok的判断
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//在这里才是获取到有效路径.
txtPath.Text= openFileDialog1.FileName;
}

FolderBrowserDialog 文件夹浏览对话框

SelectedPath 是选择后的目录绝对路径
RootFolder = Environment.SpecialFolder.Cookies; (默认桌面)不推荐大家修改默认目录,因为有些计算机不是用管理员身份启动,那么他们没有办法访问C盘中的特殊文件夹



string Path = Application.StartupPath; 不会增加/需要手动添加

string cPath = AppDomain.CurrentDomain.BaseDirectory; 会在目录后增加/

课外知识 抽象类
abstract 抽象标示符
只要是抽象类,类的本身都会具有创建这个抽象类的方法

typeof 获取某个对象的类型

string[] s = Enum.GetNames(typeof(PictureBoxSizeMode)); 获取枚举中的所有Name(也就是显示的文字)
//根据Name 来得到相应的枚举类型.
Enum.Parse(typeof(PictureBoxSizeMode), name); 返回typeof 中对应的枚举类型

直接根据值进行强制类型转换
先决条件 枚举类型的数据必须是连续性的,而且index也是连续性的 并且index与枚举的值是连续的

int index= cmb1.SelectedIndex; //获取当前选择的index
//将index转换为枚举对象
PictureBoxSizeMode ps = (PictureBoxSizeMode)index;

向下托选选择:按住键盘的ALT键

日期时间控件(DateTimePicker) 控件会根据你本地的设置而设置
ShowUpDown 开启时,没有下拉选择,只能通过键盘的上下键来调整数值,或者使用UPDown控件调整
Format
Long 长时间类型 (年月日)
Short短时间类型 (2017/6/9)
Time 只显示时间 (17:27:20 PM) 仅显示时间
Custom 自定义时间格式

CustomFormat属性定义自定义显示格式 (yyyy-MM-dd HH:mm:ss 常规格式)[yyyy 年 MM 月份 dd 日期 HH 24小时制: mm 分钟 ss 秒]

Value 属性获取的是本地显示的时间格式. value获取的是时间类型 Datetime;
如果想获取自定义格式的样式时间,那么应该使用Text属性.获取到的是一个文本字符串

进度条(ProgressBar)
两个基本属性
MaxNum(最大值),MinNum(最小值)
Value(当前数值),
Step(增量值) : 每次增长多少


progressBar1.PerformStep(); 按照Step设置的大小移动
如果需要做的数据规模较大,不希望每次按照固定数量增长,那么我们可以直接设置value 值来打到目的

使用场景:
载入资源时
分步骤:
1. 读取本地资源.
2. 读取基本数据.
3. 同步服务器资源.
更新文件:
读取文件



多个进度条更新思路(
第一个进度条 p1 最大值100,
每次增长10.
p2, 最大值 100,
每次增长10;
)
1.让p1增长;(for p1.maxnum)
2. p1.value == p1.maxnum , 执行p2的增长;

for (int i=0;i<=p2.maxvalue;i++)
{
for(int j= 0;j<=p1.maxvalue;j++)
{
p1.value = j;
}
p2.value = i;
}

数字输入框(NumericUpDown)  

  
不许要判断输入的结果.(只能输入数字;-;包括小数点.)
textAlin 设置文本显示的位置

Hexadecimal 以16进制显示数据
DecimalPlaces 显示的小数位.默认为0(没有小数位)
Increment 按上或者下加减的数

气泡提示(ToolTip)
ToolTip的展示效果
当拖动ToolTip控件至窗体时,无法直观的看见

//单位都是毫秒. 1s = 1000ms
//toolTip1.InitialDelay //悬停时间
//toolTip1.AutomaticDelay //延迟时间
//toolTip1.AutoPopDelay //气泡可见时间
//toolTip1.ReshowDelay //其他控件弹出气泡的时间间隔.
//toolTip1.IsBalloon 是否以气球的形式出现


空白符 : 空格( )
: Tab制表符( )
: xp的时候使用智能ABC,按V,接着按数字,会找到一些空白符

对某个控件进行提示,那么我们设置该控件的ToolTip

托盘控件(NotifyIcon)

程序退出时,请设置 this.notifyIcon1.Visible = false; 否则托盘内会有图标残留

树控件(TreeView)
层级/分类 展示型控件
Nodes 作为所有子项(子节点)的集合
HotTracking 提供鼠标效果(移动至节点后,节点名称会以下划线形式展示)

列表控件(ListView)
列表展示(表格)
View 显示模式
Details(详细模式)
FullRowSelect 让一行被选中
GridLines 是否显示网格线

项:
第一个ListViewItem 它的Text 显示在第一列
它的子项,显示在后面的列
每一个ListViewItem 为一行.Item中的子项(SubItem) 对应剩余的列
当ListViewItem的SubItem超出列数,则不会被显示出来

列:
第一列的文本显示只能在左边(其余列是可以的).

删除时不要以index作为删除依据,因为在删除时会发生index的重新排序.

容器(Panel面板)(SplitContainer分隔容器)(TabControl 选项卡控件)

Panel面板
作用: 作为一个控件集合相当于div(移动panel就可以整体移动panel的的多个组件,与groupbox相比groupbox顶部多一个标题)

属性面板:外观--borderstyle设置panel的边框线

一个美化的SplitContainer
首先添加 标签
隐藏这个标签
折叠panel1时显示

一些小技巧:
部分异常
全局异常
日志的重要性
门:
合理的使用控件
面向对象的方式使用控件
控件多的时候如何操作.
动态加载和组合控件
自定义控件(用户控件)

遁:
窗体美化
如何使用皮肤来美化控件(SkinH)
制作我们自己的窗体


甲:
案例大集合
读取文件到列表框显示/保存数据为csv/txt等格式.
一个简单的登录案列.
闯关游戏.

原文地址:https://www.cnblogs.com/lichihua/p/10885432.html