C# 重写LinkLabel控件的click事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 重写LinkLabel控件的click事件相关的知识,希望对你有一定的参考价值。

1、在新建的窗口form1上,拖入系统控件Linklabel控件,但我想按着我的想法重写这个控件,怎么弄?
2、我新建了一个类,手工使这个类集成系统的Linklabel,然后修改form1.designer.cs里面的代码,这样可以吗?怎么添加LinkLabel的鼠标单击的事件?
3、怎样才能当我点击这个控件时,按着我重写的click事件执行程序呢?

楼主你的想法是可以的。

要手动修改form1.designer.cs:
this.linkLabel1 = new MyLinkButton();

private MyLinkButton linkLabel1;

 

你的LinkLabel控件:

 public class MyLinkButton : System.Windows.Forms.LinkLabel
    
                protected override void OnLinkClicked(LinkLabelLinkClickedEventArgs e)
        
            MessageBox.Show("MyLinkButton里面的Click方法");
            //把下面这句注释,那么Form1里面的OnLinkClicked方法就不再执行了
            //base.OnLinkClicked(e);
            

点击效果:

追问

请问OnLinkClicked这个函数式手动添加的还是可以由工程添加?
工程添加,怎么弄啊?

追答

这个方法手动写,继承了LinkLabel以后,你写protected override 会有智能提示的。

最好是亲自试一次。

参考技术A 自定义控件需要新建一个类,继承自Linklabel,然后在方法里面override也就是你说的重写了。编译以后,工具箱应该就会有你这个新的控件了,不过图标应该是齿轮状的,可以拖动,与原来的控件没啥区别。

C# 如何使用代码添加控件及控件事件

1.首先简单设计一下界面:
添加了Click事件

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <ScrollViewer VerticalScrollBarVisibility="Auto">
        <StackPanel Name="addButtonSp" Margin="5">
            <Button FontSize="20" Foreground="Blue" Click="OnButtonClick">在窗口加入按钮</Button>
        </StackPanel>
    </ScrollViewer>
</Window>

2.在代码部分,简单设计一下控件属性
就是在点击上面Button 按钮时,界面自动添加一个按钮

private void OnButtonClick(object sender, RoutedEventArgs e)
{
    Button btn = new Button();
    btn.Background = Brushes.LightBlue;
    btn.Foreground = Brushes.Yellow;
    btn.Height = 50;
    btn.Content = "按钮";
    btn.Click += new RoutedEventHandler(mes);
    addButtonSp.Children.Add(btn);
}

重点来了,
btn.Click += new RoutedEventHandler(mes);
这行代码,就是用来指定所添加的button控件的点击事件,必须要用RoutedEventHandler(),其次()里面是被调用的事件函数,请往下看:
private void mes(object sender, RoutedEventArgs e),注意参数写法

private void mes(object sender, RoutedEventArgs e)
{
    MessageBoxResult a = MessageBox.Show("你点击了?", "Tip",MessageBoxButton.YesNoCancel,MessageBoxImage.Error);
    if (a == MessageBoxResult.Yes)
    {
        MessageBox.Show("你又点击了?", "haha", MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }
}
这部分的全部代码
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void OnButtonClick(object sender, RoutedEventArgs e)
    {
        Button btn = new Button();
        btn.Background = Brushes.LightBlue;
        btn.Foreground = Brushes.Yellow;
        btn.Height = 50;
        btn.Content = "按钮";
        btn.Click += new RoutedEventHandler(mes);
        addButtonSp.Children.Add(btn);
    }

    private void mes(object sender, RoutedEventArgs e)
    {
        MessageBoxResult a = MessageBox.Show("你点击了?", "Tip",MessageBoxButton.YesNoCancel,MessageBoxImage.Error);
        if (a == MessageBoxResult.Yes)
        {
            MessageBox.Show("你又点击了?", "haha", MessageBoxButton.OK, MessageBoxImage.Exclamation);
        }
        else if(a == MessageBoxResult.No)
        {
            this.Close();
        }
    }

3.结果
a.启动界面

b.疯狂加入按钮

c.随机点击一个按钮

添加button控件,再通过此控件调用其它函数,成功了O(∩_∩)O哈哈~

花絮:
其实,在实验二 图层操作.pdf中,老师给的代码就用了这个代码(>‿◠)✌

Collection:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。

以上是关于C# 重写LinkLabel控件的click事件的主要内容,如果未能解决你的问题,请参考以下文章

LinkLabel.Click 和 LinkLabel.LinkClicked 事件之间的区别?

c#如何重写类?

C# 中的 LinkLabel 在双击时复制其文本

c# 如何判断控件上有事件

对 LinkLabel 控件使用键盘快捷键

VS.net (c#)如何调用另一个控件的事件