委托与控件

委托

C#中的委托是一种引用类型,该引用类型与其他引用类型有所不同。在委托对象的引用中存放的不是对数据的引用,而是存放对方法的引用,即在委托的内部包含一个指向某个方法的指针,通过使用委托把方法的引用封装在委托对象中,然后将委托对象传递个调用引用方法的代码。

委托的本质是一个类,定义了方法的类型,是将方法作为参数传递到另一个方法的特殊类。
委托可以认为是持有一个或者多个方法的对象,当委托被调用时,它持有的方法也会被调用。
委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。

委托的类型

委托可以分为 命名方法委托、多播委托、匿名委托,其中命名方法委托是最常见的一种委托。

1、命名方法委托

命名方法委托的语法格式如下:

修饰符  delegate  返回类型  委托名称  (参数列表);

其中,修饰符是可选项;返回类型、关键字delegate和委托名称是必需项;参数列表用来指定委托所匹配的方法的参数列表,所以是可选项。

定义好委托后就到实例化委托,在实例化委托是必须带入方法的具体名称。

实例化委托的语法格式如下:

委托名 委托对象名 = new 委托名 ( 方法名 );

委托中传递的方法名既可以是静态方法的名称,也可以是实例方法的名称。

需要注意的是,在委托中所写的方法名必须与委托定义时的返回值类型和参数列表相同。

在实例化委托后即可调用委托,语法形式如下:

委托对象名 ( 参数列表 );

2、多播委托

多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中使用加号运算符或者减号运算符来实现添加或撤销方法。 

实例:模拟点餐平台预定不同类型的商品

//模拟点餐平台预定不同类型的商品
class Program
    {
        //定义购买商品委托
        public delegate void OrderDelegate();
        static void Main(string[] args)
        {
            //实例化委托
            OrderDelegate buy = new OrderDelegate(Order.BuyFood);
            //向委托中注册方法
            buy += Order.BuyCake;
            buy += Order.BuyFlower;
            //调用委托
            buy();
            Console.ReadLine();
        }
    }
    public class Order
    {
        //委托方法(返回值和参数必须与定义的委托类型一样)
        public static void BuyFood()
        {
            Console.WriteLine("购买快餐!");
        }
        public static void BuyCake()
        {
            Console.WriteLine("购买蛋糕!");
        }
        public static void BuyFlower()
        {
            Console.WriteLine("购买鲜花!");
        }
    }

结果:

在使用多播委托时需要注意,在委托中注册的方法参数列表必须与委托定义的参数列表相同,否则不能将方法添加到委托上。

3、匿名委托

匿名委托是指在使用匿名方法注册在委托上,实际上是在委托中通过定义代码块来实现委托的作用。语法格式如下:

//1. 定义委托
修饰符  delegate  返回值类型  委托名 ( 参数列表 );

//2. 定义匿名委托
委托名  委托对象 = delegate
{
	//代码块
};

//3. 调用匿名委托
委托对象名 ( 参数列表 );

实例:使用匿名委托计算长方形的面积

class Program
{
    //定义委托
    public delegate void AreaDelegate(double length,double width);
    static void Main(string[] args)
    {
        Console.WriteLine("请输入长方形的长:");
        double length = double.Parse(Console.ReadLine());
        Console.WriteLine("请输入长方形的宽:");
        double width = double.Parse(Console.ReadLine());
        AreaDelegate area = delegate
        {
            Console.WriteLine("长方形的面积为:" + length * width);
        };
        area(length, width);
        Console.ReadLine();
    }
}

结果:

一个与委托类型相匹配的方法必须满足以下两个条件:

1.二者具有相同的签名,即具有相同的参数数目,并且类型相同,顺序相同,参数的修饰符也相同。

2.二者具有相同的返回值类型。

委托是方法的类型安全的引用,委托是安全的,是因为委托和其他所有的C#成员一样,是一种数据类型,并且任何委托对象都是来自System.Delegat的某个派生类的一个对象。

控件

ListView控件

ListView控件,又称为列表视图控件,它主要用于显示带图标的项列表,其中可以显示大图标、小图标和数据。使用ListView控件可以创建类似Windows资源管理器右边窗口的用户界面。

1、常用属性

(1)Activation:控件用户在列表视图中激活选项的方式。含值以下:

Standard:这个设置是用户为自己的机器选择的值

OneClick:单击一个选项,激活它

TwoClick:双击一个选项,激活它

(2)Alignment:控件列表视图中的选项对齐的方式。值如下:

Default:如果用户拖放一个选项,它将仍位于拖动前的位置

Left:选项与ListView控件的左边界对齐

Top:选项与ListView控件的顶边界对齐

SnapToGrid:ListView控件包含一个不可见的网络,选项都放在该网络中

(3)AllowColumnReorder:允许用户改变列表视图中列的顺序。如果这么做,就应确保即使改变了列的属性顺序,填充列表视图的例程也能正确插入选项。

(4)AutoArrange:自动根据Alignment属性排序。如果用户把一个选项拖放到列表视图的中央,且Alignment是Left,则选项会自动左对齐。只有在View属性是LargeIco或SmaillIcon时,这个属性才有意义。

(5)CheckBoxes:列表视图中的每个选项会在其左边显示一个复选框。

(6)CheckedInices,CheckedItems:利用这两个属性分别可以访问索引和选项的集合,该集合包含列表中被选中的选项。

(7)Columns:列表视图可以包含列,通过这个属性可以访误码列集合,通过该集合,可以增加或删除列。

(8)FocusedItem:包含视图中有焦点的选项。如果没有选项,该属性就为Null。

(9)FullRowSelect:为True时,单击一个选项,该选项所在的整行文本都会突出显示。如果该属性为False,则只有选项本向会突出显示。

(10)GridLines:为True时,列表视图会在行和列之间绘制网络线。只有View属性为Details时,这个属性才有意义。

(11)HeaderStyle:列标题有显示方式,有3种样式如下所示:

Clickable:列标题为一个按钮

NonClickable:列标题不响就鼠标单击

None:不显示列标题

(12)HoverSelection:为True时,用户可以把鼠标指针放在列表视图的一个选项上,以选择它。

(13)Items:列表视图的选项集合。

(14)LabelEdit:为True时,用户可以在Details视图下编辑第一列的内容。

(15)LabelWrap:为True时,标签会自动换行,以显示所有文本。

(16)LargeImageList:这个属性包含ImageList,而ImageList包含大图像。这些图像可以在View属性为LargeIcon时使用。

(17)MultiSelect:可以多选。

(18)Scrollabel:显示滚动条。

(19)SelectedIndices,SelectedItems:这两个属性分别包含选中的索引和选项的集合。

(20)SmallImageList:当View属性为SmaillIcon时,这个属性包含了ImageList,其中ImageList包含了要使用的图像。

(21)Sorting::可以让列表视图对包含的选项排序,有3种模式:Ascending,Descending,None。

(22)StateImageList:ImageList包含图像的蒙板,这些图像蒙板可用作LargeImageList和SmallImageList图像的覆盖图,表标定制的状态。

(23)TopItem:返回列表视图顶部的选项。

(24)View:列表视图可以用4种不同的模式显示其选项:

LargeIcon:所有选项都在其旁边显示一个大图标(32*32)和一个标签

SamllIcon:所有选项都在其旁边显示一个小图标(32*16)和一个标签

List:只显示一列。该列可以包含一个图标和一个标签

Details:可以显示任意数量的列。只有第一列可以包含图标

(25)Tile:只用于WindowsXp和较新的Windwos平台)显示一个大图标和一个标签,在图标的右边显示子项信息。

2、常用方法

(1)BeginUpdate:开始更新,直到调用EmdUpdate为止。当一次插入多个选项使用这个方法很有用,因为它会禁止视图闪烁,并可以大大提高速度。

(2)Clear:彻度清除视图,删除所有的选项和列。

(3)EndUpdate:结束更新。

(4)EnsureVisible:列表视图滚动以显示指定索引的选项。

(5)GetItemAt:返回列表视图中位于x,y的选项。

3、常用事件

(1)AfterLabelEdit:在编辑了标签后,引发该事件。

(2)BeforeLabelEdit:在用户开始编辑卷标前,引发该事件。

(3)ColumnClick:单击一列时,引发该事件。

(4)ItemActivate:在激活一个选项时,引发该事件。

MonthCanlendar控件

MonthCalendar控件用来查看和设置日期信息。它是一个可视化网络图形界面,风格内包含月份的编号日期,这些日期排列在周一至周日下方的七个列中。用户可以单击月份标题任何一侧的箭头按钮来选择不同的月份。该控件还有一个更强的功能,就是可以选择日期范围。

1、常用属性

(1)BoldedDates:以粗体显示当前设置的日期。

(2)AnnuallyBoldedDates:每年都以粗体显示设置的日期。

(3)MonthlyBoldedDates:每月都以粗体显示设置的日期。

(4)BackColor:月份中显示的背景颜色 。

(5)ForeColor:用于显示月份中文本的颜色 。

(6)TitleBackColor:日历标题中显示的背景色。

(7)TitleForeColor:用于显示日历中标题文本的颜色 。

(8)TrailingForeColor:用于显示在月历上出现的上一个月和下一个月的颜色 

(9)ShowToday:ShowTodayCircle:来判断是否在控件底部显示今天日期。

(10)ShowTodayCircle:确定是否在今天这一日期上加圆圈。

(11)ShowWeekNumbers:设置为True,用于确定是否在每行日期的左侧显示周数。

(12)CalenderDimensions:设置要显示的月份个数。

(13)CalendarDimensions:使控件在水平和垂直方向都显示两个月份。

(14)MaxDate,MinDate:分别用来设置选择的最大日期,最小日期。

(15)SelectionStart:用于设置日期的开始。

(16)SelectionEnd:用于设置日期的结束。

2、常用方法

(1)AddBoldedDate:在月历中添加以粗体显示的日期

(2)UpdateBoldedDates:重绘粗体格式的日期。

ListBox控件

ListBox 控件又称列表框,它在工具箱中的图标为,它显示一个项目列表供用户选择。在列表框中,用户一次可以选择一项,也可以选择多项。

1、常用属性

(1) Items属性: 用于存放列表框中的列表项,是一个集合。通过该属性,可以添加列表项、移除列表项和获得列表项的数目。

(2)MultiColumn 属性:用来获取或设置一个值,该值指示ListBox是否支持多列。值为 true 时表示支持多列,值为 false 时不支持多列。当使用多列模式时,可以使控件得以显示更多可见项。

(3)ColumnWidth 属性:用来获取或设置多列 ListBox控件中列的宽度。

(4)SelectionMode属性:用来获取或设置在ListBox控件中选择列表项的方法。当SelectionMode属性设置为 SelectionMode.MultiExtended 时,按下 Shift 键的同时单击鼠标或者同时按 Shift 键和箭头键之一(上箭头键、下箭头键、左箭头键和右箭头键),会将选定内容从前一选定项扩展到当前项。按 Ctrl 键的同时单击鼠标将选择或撤销选择列表中的某项;当该属性设置为SelectionMode.MultiSimple 时,鼠标单击或按- 11 -空格键将选择或撤销选择列表中的某项;该属性的默认值为SelectionMode.One,则只能选择一项。

(5)SelectedIndex属性:用来获取或设置ListBox控件中当前选定项的从零开始的索引。如果未选定任何项,则返回值为1。对于只能选择一项的ListBox控件,可使用此属性确定ListBox中选定的项的索引。如果 ListBox 控件的 SelectionMode 属性设置为 SelectionMode.MultiSimple 或SelectionMode.MultiExtended,并在该列表中选定多个项,此时应用SelectedIndices来获取选定项的索引。

(6)SelectedIndices。该属性用来获取一个集合,该集合包含 ListBox 控件中所有选定项的从零开始的索引。

(7)SelectedItem属性:获取或设置ListBox中的当前选定项。

(8)SelectedItems属性:获取 ListBox控件中选定项的集合,通常在ListBox控件的SelectionMode属性值设置为SelectionMode.MultiSimple或SelectionMode.MultiExtended(它指示多重选择ListBox)时使用。

(9)Sorted属性:获取或设置一个值,该值指示ListBox控件中的列表项是否按字母顺序排序。如果列表项按字母排序,该属性值为true;如果列表项不按字母排序,该属性值为false。默认值为false。在向已排序的 ListBox控件中添加项时,这些项会移动到排序列表中适当的位置。

(10)Text 属性:该属性用来获取或搜索 ListBox 控件中当前选定项的文本。当把此属性值设置为字符串值时,ListBox 控件将在列表内搜索与指定文本匹配的项并选择该项。若在列表中选择了一项或多项,该属性将返回第一个选定项的文本。

(11)ItemsCount属性:该属性用来返回列表项的数目。

2、常用方法

(1)FindString方法:用来查找列表项中以指定字符串开始的第一个项,有两种调用格式。
[格式1]:
ListBox对象.FindString(s);
[功能]:在“ListBox 对象”指定的列表框中查找字符串 s,如果找到则返回该项从零开始的索引;如果找不到匹配项,则返回ListBox.NoMatches。
[格式2]:
ListBox对象.FindString(s,n);
[功能]:在 ListBox 对象指定的列表框中查找字符串 s,查找的起始项为n+1,即 n 为开始查找的前一项的索引。如果找到则返回该项从零开始的索引;如果找不到匹配项,则返回ListBox.NoMatches。
注意:FindString 方式只是词语部分匹配,即要查找的字符串在列表项的开头,便认为是匹配的,如果要精确匹配,即只有在列表项与查找字符串完全一致时才认为匹配,可使用FindStringExact方法,调用格式与功能与FindString基本一致。

(2)SetSelected方法:用来选中某一项或取消对某一项的选择,调用格式及功能如下。
[格式]:
ListBox对象.SetSelected(n,l);
[功能]:如果参数 l 的值是 true,则在 ListBox 对象指定的列表框中选中索引为 n 的列表项,如果参数l 的值是 false,则索引为n 的列表项未被选中。

(3)Items.Add方法:用来向列表框中增添一个列表项,调用格式及功能如下。
[格式]:
ListBox对象.Items.Add(s);
[功能]:把参数s添加到“listBox对象”指定的列表框的列表项中。

(4)Items.Insert方法:用来在列表框中指定位置插入一个列表项,调用格式及功能如下。
[格式]:
ListBox对象.Items.Insert(n,s);
[功能]:参数n代表要插入的项的位置索引,参数 s代表要插入的项,其功能是把s插入到“listBox对象”指定的列表框的索引为n的位置处。

(5)Items.Remove方法:用来从列表框中删除一个列表项,调用格式及功能如下。
[格式]:
ListBox对象.Items.Remove(k);
[功能]:从 ListBox对象指定的列表框中删除列表项s。

(6)Items.Clear方法:用来清除列表框中的所有项。其调用格式如下:
ListBox对象.Items.Clear();
该方法无参数。

(7)BeginUpdate方法和EndUpdate方法:这两个方法均无参数,调用格式分别如下:
ListBox对象.BeginUpdate();
ListBox对象.EndUpdate();
这两个方法的作用是保证使用 Items.Add 方法向列表框中添加列表项时,不重绘列表框。即在向列表框添加项之前,调用BeginUpdate方法,以防止每次向列表框中添加项时都重新绘制 ListBox 控件。完成向列表框中添加项的任务后,再调用 EndUpdate 方法使 ListBox 控件重新绘制。当向列表框中添加大量的列表项时,使用这种方法添加项可以防止在绘制 ListBox 时的闪烁现象。

3、常用事件

Click和 SelectedIndexChanged,SelectedIndexChanged事件在列表框中改变选中项时发生。

CheckedListBox 控件

CheckedListBox控件又称复选列表框,它扩展了ListBox控件,它几乎能完成列表框可以完成的所有任务,并且还可以在列表项旁边显示复选标记。两种控件间的其他差异在于,复选列表框只支持DrawMode.Normal,并且复选列表框只能有一项选定或没有任何选定。此处需要注意一点:选定的项是指窗体上突出显示的项,已选中的项是指左边的复选框被选中的项。

除具有列表框的全部属性外,它还具有以下属性。

(1)CheckOnClick属性:获取或设置一个值,该值指示当某项被选定时是否应切换左侧的复选框。如果立即切换选中标记,则该属性值为true;否则为false。默认值为false。

(2)CheckedItems 属性:该属性是复选列表框中选中项的集合,只代表处于CheckState. Checked或CheckState.Indeterminate状态的那些项。 该集合中的索引按升序排列。

(3)CheckedIndices 属性:该属性代表选中项(处于选中状态或中间状态的那些项)索引的集合。

NumericUpDown 控件

【Windows 窗体】控件组中的 NumericUpDown 控件看起来像是一个文本框与一对用户可单击以调整值的箭头的组合。可以通过单击向上和向下按钮、按向上和向下箭头键来增大和减小数字,也可以直接输入数字。单击向上箭头键时,值向最大值方向增加;单击向下箭头键时,值向最小值方向减少。

常用属性

(1)DecimalPlaces:获取或设置该控件中显示的小数位数。

(2)Hexadecimal:获取或设置一个值,该值指示该控件是否以十六进制格式显示所包
含的值。

(3)Increment:获取或设置单击向上或向下按钮时,该控件递增或递减的值。

(4)Maximum:获取或设置该控件的最大值。

(5)Minimum:获取或设置该控件的最小值。

(6)Value:获取或设置该控件的当前值。

NumericUpDown控件的常用事件有:ValueChanged、GotFocus、LostFocus等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值