委托定义
委托(Delegate),是函数指针的“升级版”
委托的字面意思:有一件事,我不自己做,而是委托别人去做
常用属性
- 委托类似于 C++ 函数指针,但委托完全面向对象,不像 C++ 指针会记住函数,委托会同时封装对象实例和方法。
- 委托允许将方法作为参数进行传递。
- 委托可用于定义回调方法。
- 委托可以链接在一起;例如,可以对一个事件调用多个方法。
- 方法不必与委托类型完全匹配。
- 使用 Lambda 表达式可以更简练地编写内联代码块。 Lambda 表达式(在某些上下文中)可编译为委托类型。 若要详细了解 lambda 表达式,请参阅 lambda表达式。
常用方法
1,声明委托:
Delegate void Print(int x)
2,初始化,给委托赋值
- 方法1:Print someFunc=hello;
- 方法2:Print someFunc=new Print(hello);
3,调用委托变量
SomeFunc(x);
系统内置委托
前面是自己定义的委托,但是系统也提供了两种委托:Action和Func,Action用于不需 要返回值的委托,Func适合需要返回值的委托
Action委托
1,Action委托 封装一个方法,该方法不具有参数并且不返回值
2,Action<T>委托 封装一个方法,该方法只有一个参数并且不返回值
3,Action<T1,T2>委托 封装一个方法,该方法具有两个参数并且不返回值
最多有16个参数
Func委托
1,Func(TResult)委托封装封装一个不具有参数但却返回 TResult 参数指定的类型值的方 法
2,Func(T,TResult)委托 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法
3,Func(T1,T2,TResult)委托 封装一个具有两个参数并返回 TResult 参数指定的类型值的方 法
其中的T是参数类型,TResult是返回值类型
常用事件
和委托类似,事件是后期绑定机制。 实际上,事件是建立在对委托的语言支持之上的。
事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。 任何其他组件都可以订阅事件,并在事件引发时得到通知。
你可能已在某些编程中使用过事件。 许多图形系统都具有用于报告用户交互的事件模型。 这些事件会报告鼠标移动、按钮点击和类似的交互。 这是使用事件的最常见情景之一,但并非唯一的情景。
可以定义应针对类引发的事件。 使用事件时,需要注意的一点是特定事件可能没有任何注册的对象。 必须编写代码,以确保在未配置侦听器时不会引发事件。
通过订阅事件,还可在两个对象(事件源和事件接收器)之间创建耦合。 需要确保当不再对事件感兴趣时,事件接收器将从事件源取消订阅。
控件
StatusStrip控件
Windows 窗体 StatusStrip
控件在窗体中用作区域,通常显示在窗口底部,应用程序可在此显示各种状态信息。 StatusStrip
控件上通常具有 ToolStripStatusLabel
控件(用于显示文本或图标以指示状态)或 TooltripProgressBar(用于以图形方式显示进程的完成状态)。
重要 StatusStrip 成员
名称 | 描述 |
---|---|
CanOverflo | 获取或设置一个值,该值指示 StatusStrip是否支持溢出功能。 |
Stretch | 获取或设置一个值,该值指示 StatusStrip是否在其 ToolStripContainer中从一端拉伸到了另一端。 |
重要 StatusStrip 伴随类
名称 | 描述 |
---|---|
StatusStripStatusLabel | 表示 StatusStrip 控件中的一个面板。 |
ToolStripDropDownButton | 显示一个相关联的 ToolStripDropDown,用户可以从中选择单个项目。 |
ToolStripSplitButton | 表示一个两部分的控件,其中包括一个标准按钮和一个下拉菜单。 |
ToolStripProgressBar | 显示进程的完成状态。 |
LinkLable控件
在窗体上放置 LinkLabel 控件:
在 Visual Studio 的窗体设计器中,从工具箱中拖动并放置一个 LinkLabel 控件到你的窗体上。
设置 LinkLabel 的属性:
Text:设置 LinkLabel 显示的文本内容。
Name:为 LinkLabel 指定一个唯一的名称。
LinkColor:设置 LinkLabel 的链接文本颜色。
VisitedLinkColor:设置 LinkLabel 的已访问链接文本颜色。
ActiveLinkColor:设置 LinkLabel 的活动链接文本颜色。
Font:设置 LinkLabel 的字体样式。
处理 LinkLabel 的事件:
LinkClicked:当用户点击 LinkLabel 中的链接文本时触发的事件。你可以通过订阅该事件,在链接文本被点击时执行特定的操作
DataGridView控件
在DataGridView控件中显示数据
通过DataGridView控件显示数据表中的数据,首先需要使用DataAdapter对象查询指定的数据,然后通过该对象的Fill方法填充DataSet(关于DataAdapter对象以及Fill方法可参见第15章的内容),最后设置DataGridView控件的DataSource属性为DataSet的表格数据。DataSource属性用于获取或设置DataGridView控件所显示数据的数据源。
语法:
public Object DataSource { get; set; }
属性值:包含DataGridView控件要显示的数据的对象。
获取DataGridView控件中的当前单元格
若要与DataGridView进行交互,通常要求通过编程方式发现哪个单元格处于活动状态。如果需要更改当前单元格,可通过DataGridView控件的CurrentCell属性来获取当前单元格信息。
CurrentCell属性用于获取当前处于活动状态的单元格。
语法:
public DataGridViewCell CurrentCell { get; set; }
属性值:表示当前单元格的DataGridViewCell,如果没有当前单元格,则为空引用。默认值是第一列中的第一个单元格,如果控件中没有单元格,则为空引用。
直接在DataGridView控件中修改数据
在DataGridView控件中修改数据,主要用到DataTable的ImportRow方法和DataAdapter对象的Update方法。实现的过程是通过DataTable的ImportRow方法将更改后的数据复制到一个DataTable中,然后通过DataAdapter对象的Update方法,将DataTable中的数据更新到数据库中。
ImportRow方法用于将DataRow复制到DataTable中,保留任何属性设置以及初始值和当前值。
语法:
public void ImportRow (DataRow row)
row:要导入的DataRow。
当选中DataGridView控件中的行时显示不同的颜色
可以利用DataGridView控件的SelectionMode、ReadOnly和SelectionBackColor属性实现当选中DataGridView控件中的行时显示不同的颜色。
(1)SelectionMode用于设置如何选择DataGridView的单元格。
语法:
public DataGridViewSelectionMode SelectionMode { get; set; }
属性值:DataGridViewSelectionMode值之一,默认RowHeaderSelect
(2)ReadOnly属性用于设置是否可以编辑DataGridView控件的单元格。
语法:
public bool ReadOnly { get; set; }
属性值:如果用户不能编辑DataGridView控件的单元格,则为true;否则为false。默认为false。
(3)SelectionBackColor属性用于设置DataGridView单元格在被选定时的背景色。
语法:
public Color SelectionBackColor { get; set; }
属性值:Color,它表示选定单元格的背景色,默认为Empty。
Timer控件
Timer控件用于背景进程中,通俗来说就是计时器,这是一个不可视控件。 Timer控件主要属性:Enabled和Interval Timer控件主要事件:Tick()
属性:Enabled和Interval
Enabled :Enabled主要是控制当前Timer控件是否可用
Interval 设置事件的时间,以毫秒为单位
事件:Tick()
Tick事件指的是每经过Interval属性指定的时间间隔时发生一次
TabControlk控件
默认情况下,TabControl控件包含两个TabPage控件,可以使用TabPage属性的Add方法和Remove方法实现选项卡的添加和删除。
常用属性:
属性 | 说明 |
---|---|
ImageList | 指定在标签上显示的图像 |
ItemSize | 指定标签的大小 |
Multiline | 表明是否能将标签显示成多行 |
SelectedIndex | 所选TabPage的索引 |
SelectedTab | 被选中的TabPage |
TabCount | 返回标签页面的数量 |
TabPages | 返回TabControl内的TabPages集合 |