Создание собственного элемента управления меткой достаточно просто, вам просто нужно начать с Control и переопределить OnPaint (). Байт собирается превратить его в элемент управления, который также имеет фокусирующее поведение. И позволяет пользователю редактировать текст. К тому времени, как вы закончите, вы заново изобрели элемент управления TextBox. Что намного сложнее, чем кажется.
Сначала сфокусируйтесь на фокусировке, это самая сложная проблема. Маловероятно, что пользователь захочет часто фокусировать элемент управления. Может быть, какое-то секретное рукопожатие, например двойной щелчок. Когда вы обнаружите один, вы можете создать элемент управления TextBox и поместить его перед меткой. И удаляйте его, когда он теряет фокус, обновляя свойство Text метки. Или простое контекстное меню, которое отображает небольшой диалог редактирования.
Пример, использующий двойной щелчок для редактирования подхода:
using System;
using System.Windows.Forms;
class MyLabel : Label {
private TextBox mEditor;
protected override void OnDoubleClick(EventArgs e) {
if (mEditor == null) {
mEditor = new TextBox();
mEditor.Location = this.Location;
mEditor.Width = this.Width;
mEditor.Font = this.Font;
mEditor.Text = this.Text;
mEditor.SelectionLength = this.Text.Length;
mEditor.Leave += new EventHandler(mEditor_Leave);
this.Parent.Controls.Add(mEditor);
this.Parent.Controls.SetChildIndex(mEditor, 0);
mEditor.Focus();
}
base.OnDoubleClick(e);
}
void mEditor_Leave(object sender, EventArgs e) {
this.Text = mEditor.Text;
mEditor.Dispose();
mEditor = null;
}
protected override void Dispose(bool disposing) {
if (disposing && mEditor != null) mEditor.Dispose();
base.Dispose(disposing);
}
}