如何创建具有一些通用功能的自定义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()
欢迎学习面向对象编程:)。
您应该创建一个派生类来封装该功能。例如: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
,这就是面向对象编程的全部内容!
- 在解决方案管理器中右键单击windows窗体应用程序,选择"添加",然后选择"用户控制"…
- 输入新控件的名称,如LinkLabelTextBox
这将给你一个空间,看起来像一个窗体,但没有边框。这是你的新控制。把你的可链接框和文本框放在这个新控件上,就像你把它们放在窗口里一样,给它们你想要的功能。然后用这个新控件的实例替换所有现有控件。您将创建10个这样的标签,而不是创建10个链接标签和10个文本框。所有您想要的功能都将内置到您的新控件中,因此代码不需要重复。
代替linkLabelPlayerName1和textBoxPlayerName1,你将有一个linkLabelTextBoxPlayerName1,和没有显示,隐藏,焦点的东西会打乱你的表单代码。
另外,请确保包含一个公共Text属性,以便您可以从该控件中获取用户键入的值。
使用此功能创建您自己的Control
你的代码是正确的。
为了让它更简洁,你应该把它移动到一个单独的UserControl
,并设置Text
属性为文本框的值。