我是C#编程的新手。我来自autoit和其他脚本语言,过渡一直是最困难的。无论如何我正在使用Windows窗体中的控件,基本上我希望它是一个LinkLabel控件,当你点击它时,它将成为一个文本框,一旦你输入你的名字,然后点击回车或标签,它将将您的名称设置为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()
。
答案 0 :(得分:2)
欢迎使用面向对象的编程:)。
您应该创建一个派生类来封装功能。例如:
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 :(得分:1)
这将为您提供一个工作空间,看起来像一个Form,但没有边框。这是你的新控件。将LinkLable和TextBox放在这个新控件上,就像将它们放在窗口中一样,并为它们提供所需的功能。然后使用此新控件的实例替换所有现有控件。您将创建其中的10个,而不是创建10个LinkLabel和10个TextBox。并且您需要的所有功能都将内置到您的新控件中,因此不需要重复代码。
而不是linkLabelPlayerName1和textBoxPlayerName1,你将拥有一个linkLabelTextBoxPlayerName1,而Show,Hide,Focus的东西都不会使你的表单代码混乱。
此外,请务必包含公共Text属性,以便获取用户键入此控件的值。
答案 2 :(得分:0)
使用该功能创建您自己的Control
。
答案 3 :(得分:0)
您的代码是正确的。
为了使其更清晰,您应将其移至单独的UserControl
,并将Text
属性设置为文本框的值。