C#委托和控件

目录

       

委托(Delegate)

1、用法

2、与委托类型相匹配方法的条件

3、委托的类结构

4、创建和使用委托

(1)创建委托

(2)使用委托

5、常见委托类型

6、实例

 控件

1、RichTextBox控件(格式文本框控件)

(1)创建RichTextBox控件

(2)设置 RichTextBox 的属性

(3)处理 RichTextBox 的事件

(4)使用方法对文本进行操作

2、ListView控件(列表视图控件)

(1)创建ListView控件

(2)设置ListView的属性

(3)处理ListView的事件

(4)常用方法

3、Timer控件

(1)创建Timer控件

(2)设置Timer控件属性

(3)处理Timer事件

(4)使用方法


       

委托(Delegate)

        在C#编程语言中,委托(Delegate)是一种特殊的数据类型,用于存储方法的引用,它可以看做是函数指针的升级版。为了实现方法的参数化,提出了委托。委托是一种引用方法的类型,即委托是方法的引用,一旦为委托分配了方法,委托将于该方法具有完全相同的行为。委托的类型参数表示方法参数的类型,而返回类型表示方法返回值的类型。

1、用法

        在委托对象的引用中存放的不是对数据的引用,而是存放对方法的引用,即在委托的内部包含一个指向某个方法的指针,可以指向多个具有相同签名的方法。通过使用委托把方法的引用封装在委托对象中,然后将委托对象传输给调用引用方法的代码。委托声明如下:

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

修饰符是可选项;

返回类型、关键字delegate和委托名称是必需项;

参数列表用来指定委托所匹配的方法的参数列表,是可选项。

(1)动态绑定:委托允许在运行时动态地选择要调用的方法,提高了代码的灵活性。  
(2)事件处理:委托在事件驱动的编程模型中起到重要作用,例如 Windows Forms 和 WPF 应用程序。  
 (3)方法组合:委托可以用于将多个方法组合在一起,实现更复杂的逻辑。  
 (4)解耦:委托有助于实现模块间的解耦,降低代码之间的耦合度,提高程序的灵活性和可维护性。

2、与委托类型相匹配方法的条件

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

(2)二者具有相同的返回值类型

3、委托的类结构

        委托是方法类型安全的引用,为什么说委托是安全的,因为委托和其他所有的C#成员一样,是一种数据类型,并且任何委托对象都是System.Delegate的某个派生类的一个对象。委托的类结构如下:

自定义委托结构→System.MulticastDelegate→System.Delegate→SystemObjcet

得出:任何自定义委托类型都继承自System.Delegate类型,并且该类封装了许多委托的特性和方法。

4、创建和使用委托


(1)创建委托


   ① 使用'delegate'关键字定义委托类型 如:

 public delegate int CalculateSquare(int num);

 ② 为委托添加方法 如:

public int SquareByPlus(int num)

 { 

return num + num; 

}

public int SquareByMultiply(int num) 

{ 

return num * num; 

}


③ 创建委托实例,并将其绑定到方法上,如:

SquareDelegate squareDelegate = SquareByPlus;


(2)使用委托


① 将委托作为参数传递给其他方法,如:

CalculateSquare(squareDelegate);


② 在事件处理程序中,使用`+=`操作符将委托绑定到事件上,如

button1.Click += new EventHandler(ButtonClick);


5、常见委托类型


'Action':表示无返回值的方法,如:

action(() => Console.WriteLine("Hello, World!"))


'Func':表示有返回值的方法,如:

Func<int, int> func = (x) => x * 2


'Predicate':表示用于判断条件的方法,如:

bool predicate(int x) => x > 10

6、实例

首先,我们定义一个计算平方的委托:

public delegate int SquareDelegate(int num);  


然后,我们编写两个计算平方的方法:

public int SquareByPlus(int num)

 {  
    return num + num;  
}
public int SquareByMultiply(int num) 

{  
    return num * num;  
}


接下来,我们可以创建一个方法,接受一个SquareDelegate类型的参数,然后根据这个委托来调用对应的方法:

public static int CalculateSquare(SquareDelegate squareDelegate)

 {  
    int num = Convert.ToInt32(Console.ReadLine());  
    return squareDelegate(num);  
}


在主程序中,我们可以创建一个SquareDelegate类型的变量,然后将计算平方的方法绑定到这个变量上:

SquareDelegate squareDelegate = SquareByPlus;  


最后,我们调用CalculateSquare方法,传入我们创建的squareDelegate变量,根据用户输入的数字计算其平方:

int result = CalculateSquare(squareDelegate);  
Console.WriteLine("The square of the number is: " + result);  


        这个例子展示了如何使用委托动态地选择要调用的方法。这种编程技巧在事件处理、回调函数等方面有着广泛的应用。


        总结一下,C#中的委托是一种灵活的处理事件的机制,它允许我们在运行时动态地绑定方法,从而实现更高效的代码组织和灵活的编程风格。通过使用委托,我们可以将方法作为参数传递给其他方法,实现方法组合和模块化,提高代码的可读性和可维护

 控件

         控件是用户界面(UI)的基本组成部分,它们允许用户与程序进行交互。

1、RichTextBox控件(格式文本框控件)

        主要用于显示、输入和操作带有格式的文本,比如可以实现显示字体、颜色、链接、从文件加载文本及嵌入的图片、撤销和重复编辑操作,以及查找指定的字符等功能。

(1)创建RichTextBox控件

在 Visual Studio 中,可以通过拖拽 RichTextBox 控件到窗体上或者直接在代码中创建。
 

下面是在代码中创建 RichTextBox 控件的示例:

RichTextBox richTextBox1 = new RichTextBox();
richTextBox1.Dock = DockStyle.Fill;
Controls.Add(richTextBox1);

(2)设置 RichTextBox 的属性

常用属性:

Text:设置或获取RichTextBox控件中的文本内容。
Font:设置或获取RichTextBox控件中文本的字体样式。
ForeColor和BackColor:设置或获取RichTextBox控件中文本的前景色和背景色。
ReadOnly:设置或获取RichTextBox控件是否为只读模式,即禁止用户编辑文本。
Multiline:设置或获取RichTextBox控件是否允许多行文本,默认为true。
ScrollBars:设置或获取RichTextBox控件中的滚动条样式,包括水平和垂直滚动条。
WordWrap:设置或获取RichTextBox控件中的文本是否自动换行,默认为true。
Modified:设置或获取RichTextBox控件中的文本内容是否已被修改。

// 设置 RichTextBox 的文本内容
richTextBox1.Text = "Hello, World!";
// 设置 RichTextBox 的字体和字号
richTextBox1.Font = new Font("Arial", 12);
richTextBox1.FontSize = 12;
// 设置 RichTextBox 的文本颜色
richTextBox1.ForeColor = Color.Black;
// 设置 RichTextBox 的背景色
richTextBox1.BackColor = Color.White;
// 设置 RichTextBox 的滚动条样式
richTextBox1.ScrollBars = ScrollBars.Vertical;

(3)处理 RichTextBox 的事件

常用事件:

TextChanged:当RichTextBox控件中的文本内容发生改变时,触发该事件。
SelectionChangeCommitted:当RichTextBox控件中选中的文本发生改变时,触发该事件。
MouseClick:当RichTextBox控件被鼠标点击时,触发该事件。
KeyPress:当RichTextBox控件被按下键盘上的键时,触发该事件。

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    // 处理文本改变事件,例如限制最大字符数
    richTextBox1.Text = richTextBox1.Text.Substring(0, 100); // 限制最大字符数为 100 个
}

(4)使用方法对文本进行操作

常用方法:

Clear():清除RichTextBox控件中用户输入的所有内容。
Copy()、Cut()、Paste():实现RichTextBox控件的剪贴板功能。
SelectAll():选中控件中的所有文本。
Find():实现查找功能。
SaveFile()、LoadFile():保存文本和打开文件。
Undo()、Redo():撤销上一次编辑操作、重做上次撤销的编辑操作。
Select():在RichTextBox控件中选择文本,可以选择一个单词或者一个句子等。
ScrollToCaret():将RichTextBox控件的滚动条滚动到光标位置。
SelectNone():取消在RichTextBox控件中的选择文本。
以下是一个将选中的文本颜色改为红色的示例:

private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
    // 在鼠标点击时选中文本,并将选中的文本颜色改为红色
    richTextBox1.Focus(); // 获取焦点,确保可以选中文本
    richTextBox1.Selection.Select(0, 10); // 选中前 10 个字符,也可以用鼠标拖动选中部分文本
    richTextBox1.SelectionColor = Color.Red; // 将选中的文本颜色改为红色
}

2、ListView控件(列表视图控件)

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

(1)创建ListView控件

        在Visual Studio中,可以通过拖拽ListView控件到窗体上或者直接在代码中创建。下面是在代码中创建ListView控件的示例:

ListView listView1 = new ListView();
listView1.Dock = DockStyle.Fill;
Controls.Add(listView1);

(2)设置ListView的属性

Items:获取或设置ListView控件中的项目内容,可以通过Add()方法添加项目。
View:设置ListView控件的视图模式,包括大图标、小图标、列表、详细信息等。
FullRowSelect:设置是否选择整行项目。
MultiSelect:设置是否支持多选项目。
Sorting:设置是否启用自动排序功能。
LargeImageList:设置大图标对应的ImageList对象。
SmallImageList:设置小图标对应的ImageList对象。
ColumnHeaderToolTips:设置ListView控件的列头工具提示。
SelectionMode:设置ListView控件的选择模式,包括单选、多选等。
AutoGenerateColumns:设置是否自动生成列头,默认为false。

(3)处理ListView的事件

常用事件:

ItemClick:当用户单击ListView控件中的项目时触发该事件。
ItemDoubleClick:当用户双击ListView控件中的项目时触发该事件。
ItemSelectionChanged:当ListView控件中的项目选中状态发生改变时触发该事件。
ColumnHeaderClick:当用户单击ListView控件的列头时触发该事件。
ColumnHeaderDoubleClick:当用户双击ListView控件的列头时触发该事件。

以下是一个处理ItemSelectionChanged事件的示例:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
    // 处理项目选中事件,例如选中多个项目
    if (listView1.SelectedItems.Count > 0)
    {
        // 选中多个项目,可以通过循环遍历SelectedItems属性来操作选中状态
        ListViewItem.ListViewSubItem[] subItems = listView1.GetSelectedItems();
        foreach (ListViewItem.ListViewSubItem subItem in subItems)
        {
            // 对选中项目进行操作,例如修改文本颜色或字体样式等
            subItem.Font = new Font(subItem.Font.FontFamily, subItem.Font.Size, FontStyle.Bold);
        }
    }
}

(4)常用方法

Add():添加项目到ListView控件中。
Remove():从ListView控件中移除指定项目。
Clear():清除ListView控件中的所有项目。
Refresh():刷新ListView控件,重新加载数据。
Sort():按照指定的排序规则对ListView控件中的项目进行排序。
Find():查找ListView控件中包含指定文本的项目。
Select():选中ListView控件中的指定项目。
Deselect():取消选中ListView控件中的指定项目。
Focus():将焦点移动到ListView控件中的指定项目。
EnsureVisible():确保指定的项目在ListView控件中可见。

3、Timer控件

        Timer控件是一种用于在Windows窗体中定时触发事件的控件,它通过引发Timer事件来执行指定的操作。

(1)创建Timer控件

          在Visual Studio中,可以通过拖拽Timer控件到窗体上或者直接在代码中创建。

(2)设置Timer控件属性

常用属性:

Interval:这是Timer控件最重要的属性,它决定了Timer事件多长时间被触发一次。Interval的默认值是0,这表示事件将不会被触发。如果Interval的值小于或等于0,那么Timer将不会运行。
Enabled:这个属性决定了Timer控件是否开始计时。如果Enabled的值为true,那么Timer会开始计时;如果Enabled的值为false,那么Timer会停止计时。
AutoReset:这个属性决定了每次触发Timer事件后,Timer是否会重新开始计时。如果AutoReset的值为true,那么每次触发事件后,Timer会重新开始计时;如果AutoReset的值为false,那么Timer只会触发一次。

timer1.Interval = 3600000; // 设置计时器间隔时间为360秒(1小时)
timer1.Enabled = true; // 启动计时器

(3)处理Timer事件

        Timer控件的一个重要事件是Tick事件,每当计时器间隔时间到达时,就会触发一次Tick事件。可以通过为Tick事件添加事件处理程序来执行相应的操作。

private void timer1_Tick(object sender, EventArgs e)
{
    MessageBox.Show("时间到"); // 在弹出窗口中显示"时间到"文字
}

        你可以通过以下方式使用Timer控件:首先,在Visual Studio的设计视图中,从工具箱里拖一个Timer控件到你的窗体上。然后,你可以设置它的Interval和其它属性。最后,你可以为Tick事件添加一个事件处理程序来定义每次触发事件时应该发生什么。例如:

private void timer1_Tick(object sender, EventArgs e)
{
    // 这里写你的代码,每当timer1的间隔到达时,这段代码就会被执行
}

(4)使用方法

Start():这个方法会启动Timer控件。
Stop():这个方法会停止Timer控件的运行。
Invoke():这个方法会触发一个Timer事件。

timer1.Stop(); // 停止计时器
timer1.Start(); // 启动计时器

        需要注意的是,Timer控件是为单线程环境设计的,它只能在UI线程中运行,不能在后台线程中运行。此外,Timer控件的Tick事件只能用于周期性触发,不能用于响应其他操作或用户输入。如果需要在其他操作或用户输入时执行特定的代码,需要使用其他控件或事件处理程序来实现。在使用Timer控件时,需要注意的是它是在UI线程中运行的,因此它可能会阻塞UI线程,导致界面无响应。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值