winforms 如何通过双击事件更改标签文本?

1wnzp6jl  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(142)

我可以根据用户的需要创建任意多个动态标签。

for (int j = 0; j < Nitelik_Counter; j++)
{
    Label labeltest= new Label();
    labeltest.Text = "N - " + j.ToString();
    labeltest.TextAlign = ContentAlignment.MiddleCenter;
    labeltest.Location = new Point(10 + j * 70, 10);
}

我确定了它们的默认文本,如"N+i.toString()"。之后,我将其添加到表单中。我想做的是,当表单打开时,用户双击其中一个标签,将打开一个重命名功能,如Windows操作系统中一样,当用户按下Enter键时,必须保存该功能。我该如何做?

2ledvvac

2ledvvac1#

创建标签时,按如下方式设置DoubleClick处理程序:

// ...
Label labeltest= new Label();
labeltest.DoubleClick += Label_DoubleClick;

在行程常式中,您可以将暂时的TextBox加入至表单,将它放在原始标签上,等到使用者按下Enter或Escape,然后变更或不变更原始文字并移除文字方块,如下所示:

protected void Label_DoubleClick(object? sender, EventArgs e)
{
    if (sender is Label label)
    {
        var box = new TextBox();
        box.Name = "TextField";
        box.Text = label.Text;
        box.TextAlign = HorizontalAlignment.Center;
        box.AutoSize = false;
        box.Dock = DockStyle.None;
        box.Size = label.Size;
        box.Location = this.PointToClient(label.Parent.PointToScreen(label.Location));
        box.BackColor = BackColor;
        box.PreviewKeyDown += (a, b) => {
            if (b.KeyCode == Keys.Escape)
            {
                box.Parent.Controls.Remove(box);
            }
            else if (b.KeyCode == Keys.Enter)
            {
                label.Text = box.Text;
                box.Parent.Controls.Remove(box);
            }
        };
        box.LostFocus += (a, b) => { box.Parent?.Controls.Remove(box); };

        Controls.Add(box);
        Controls.SetChildIndex(box, 0);
        box.SelectAll();
        box.Focus();
    }
}

相关问题