C#重载Label类和该类事件实现输入框(制作动态表格)

本文介绍了一种自定义Label控件的方法,通过继承Label并添加TextBox实现编辑功能。重点讲解了如何通过事件重载实现控件间的交互,并讨论了构造函数中属性设置的有效性问题。
部署运行你感兴趣的模型镜像

 首先给出原代码:

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace 导Excel控件
{
 class myLabel : Label
 {
  TextBox myText = new TextBox();
  Panel myPanel = new Panel();

  public myLabel()
  {
   // 初始化文本框控件
   myText.Visible = false;
   myText.Location = this.Location;
   myText.BorderStyle = BorderStyle.None;

   // 重写 myText 控件的单击事件
   this.myText.KeyPress += new KeyPressEventHandler(myText_KeyPress);
   
   
   // 重写 myLabel 控件的单击事件
   this.Click += new EventHandler(myLabel_Click);
   this.Leave += new System.EventHandler(myText_Leave);
   
   // 将 myText 控件添加到 myLabel 控件中
   this.Controls.Add(myText);
  }

  private void myLabel_Click(object sender, EventArgs e)
  {
   myText.Size = this.Size;
   myText.Text = this.Text;
   myText.Visible = true;
   myText.Focus();
   //MessageBox.Show("myLabel click!");
  }

  private void myText_KeyPress(object sender, KeyPressEventArgs e)
  {
   if (e.KeyChar == 13)
   {
    this.Text = myText.Text;
    this.myText.Visible = false;
   }
   //MessageBox.Show("myText_KeyPress event!");
  }

  private void myText_Leave(object sender, EventArgs e)
  {
   this.Text = myText.Text;
   this.myText.Visible = false;
   //MessageBox.Show("myText Lost Focus!");
  }
 }
}

 

可以看到:

        // 将 myText 控件添加到 myLabel 控件中
       this.Controls.Add(myText);

这条语句至关重要,另外我们在这里面涉及到了如何重载控件的事件,但一定要注意,在该类的构造函数中所有关于该类的属性值的设置和获取都会变为无效,具体原因是我们这在这里只是构造了这么一个对象,但是到了构造函数完成之后,创建该对象的程序都会对该对象再进行一次属性设置,所以,假设我们想得到该类的大小或位置时,在构造函数里面设置往往达不到效果。

    利用这个原理,我们还可以生成带有 Label 显示效果,但功能如 DateTimePicker ,有选择日期功能的超级 Label 控件。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值