如何创建具有一些通用功能的自定义c#控件?

本文关键字:功能 自定义 控件 何创建 创建 具有一 | 更新日期: 2023-09-27 17:48:59

我是c#编程新手。我来自autoit和其他脚本语言,过渡是最困难的。无论如何,我在一个窗体上的控件工作,基本上我希望它是一个LinkLabel控件,当你点击它,它会变成一个文本框,一旦你输入你的名字,要么按回车,或tab,它会设置你的名字作为LinkLabel。但是,我将在一个表单上有10个这样的控件,我这样做的方式是,每个控件有三个方法,所以这是很多代码,我确信我只是做错了,但这是我有:

namespace Program
{
    public partial class formMain : Form
    {
        public formMain()
        {
            InitializeComponent();
        }
        private void linkLabelPlayerName1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.linkLabelPlayerName1.Hide();
            this.textBoxPlayerName1.Show();
            this.textBoxPlayerName1.Focus();
            this.textBoxPlayerName1.KeyPress += new KeyPressEventHandler(textBoxPlayerName1_KeyPress);
            this.textBoxPlayerName1.LostFocus += new EventHandler(textBoxPlayerName1_LostFocus);
        }
        private void textBoxPlayerName1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                this.linkLabelPlayerName1.Text = this.textBoxPlayerName1.Text;
                this.textBoxPlayerName1.Hide();
                this.linkLabelPlayerName1.Show();
            }
        }
        private void textBoxPlayerName1_LostFocus(object sender, EventArgs e)
        {
            this.linkLabelPlayerName1.Text = this.textBoxPlayerName1.Text;
            this.textBoxPlayerName1.Hide();
            this.linkLabelPlayerName1.Show();
        }
    }
}

我确信有一种方法可以在所有10个控件之间使用最后两个方法,因此它们不必为每个控件重写。即textBoxPlayerName1_LostFocus()textBoxPlayerName2_LostFocus()

如何创建具有一些通用功能的自定义c#控件?

欢迎学习面向对象编程:)。

您应该创建一个派生类来封装该功能。例如:
class EditableText : UserControl
{
    private LinkLabel lblName;
    private TextBox txtName;
    public EditableText()
    {
        // Construct objects, attach events and add them
        // as children to this object
    }
    // Return the text of encapsulated TextBox
    public string Text
    {
       get { return txtName.Text; }
    }
}

现在你可以在不同的领域重用这个class,这就是面向对象编程的全部内容!

  1. 在解决方案管理器中右键单击windows窗体应用程序,选择"添加",然后选择"用户控制"…
  2. 输入新控件的名称,如LinkLabelTextBox

这将给你一个空间,看起来像一个窗体,但没有边框。这是你的新控制。把你的可链接框和文本框放在这个新控件上,就像你把它们放在窗口里一样,给它们你想要的功能。然后用这个新控件的实例替换所有现有控件。您将创建10个这样的标签,而不是创建10个链接标签和10个文本框。所有您想要的功能都将内置到您的新控件中,因此代码不需要重复。

代替linkLabelPlayerName1和textBoxPlayerName1,你将有一个linkLabelTextBoxPlayerName1,和没有显示,隐藏,焦点的东西会打乱你的表单代码。

另外,请确保包含一个公共Text属性,以便您可以从该控件中获取用户键入的值。

使用此功能创建您自己的Control

你的代码是正确的。

为了让它更简洁,你应该把它移动到一个单独的UserControl,并设置Text属性为文本框的值。