重新创建标签控件

5 .net c# controls label extend

我需要从头开始重新创建/重新创建Label Control以添加我自己的mojoness.是的,我知道你在想什么(如果你不这么想,你不应该这样吗?).

有人能指出我正确的方向吗?

谢谢.

重新创建标签的全部目的是我想要完全控制它在屏幕上的绘制方式,这样我也可以使用KeyDown事件处理程序.例如,用户可以像编辑TextBox控件的内容一样编辑标签的内容.

此外,我不能简单地使用TextBox控件,因为它几乎需要,甚至更多的工作来获得我想要的结果.

Kyl*_*ndo 5

为什么不扩展当前的?

class MyMojoLabel : Label // Kind of thing


Han*_*ant 1

创建您自己的标签控件非常简单,您只需从 Control 开始并重写 OnPaint() 即可。去byte就是把它变成一个也有聚焦行为的控件。并允许用户编辑文本。完成后,您将重新发明 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);
  }
}
Run Code Online (Sandbox Code Playgroud)