使 TextBox 可由 ContextMenuStrip 编辑 - c# winform

Make TextBox Editable by ContextMenuStrip - c# winform

我的 C# Winform 中有一个文本框。默认情况下,程序会为文本框分配一个值。

我希望用户具有右键单击功能以在运行时编辑此文本。所以当用户右键单击编辑时,背景应该变成白色,用户应该可以编辑文本。编辑后,背景应该return默认且不可编辑

我创建了一个带有右键单击事件的 ContextMenuStrip 以按如下方式编辑文本,并在用户右键单击并按下编辑菜单项时将只读 属性 分配为 false:

private void editTextToolStripMenuItem_Click(object sender, EventArgs e)
{
    itxt_CommonTitle.ReadOnly = false;
}

我不确定如何进行下一步。这可能使用文本框吗?

我认为您缺少一个过程。编辑后,应该有更新或保存方法。

  1. 文本框只读=真;
  2. 编辑文本框:文本框只读 = false;
  3. 按钮保存:文本框 readonyl = true;

编辑: 像这样:

    private void buttonSave_Click(object sender, EventArgs e)
    {
        textBox1.ReadOnly = true;
    }

    private void editToolStripMenuItem_Click(object sender, EventArgs e)
    {
        textBox1.ReadOnly = false;
    }

你不需要改变 backColor,只需要 readonly prop 就可以了。

如果您没有在设计器中更改 TextBoxBackColor 那么当您设置 ReadOnly = true 并从灰色变回背景颜色时,背景颜色应该会自动从白色变为灰色当您设置 ReadOnly = false 时为白色。但是,如果您在设计器中将其更改为其他内容,那么最简单的方法就是在启用控件进行编辑之前设置一个私有变量以记住原始的 BackColor。设置回只读后就可以恢复颜色了。

private void editToolStripMenuItem_Click(object sender, EventArgs e)
{
    MakeTextBoxEditable(itxt_CommonTitle);
}

private void itxt_CommonTitle_Leave(object sender, EventArgs e)
{
    MakeTextBoxReadOnly(itxt_CommonTitle);
}

private void Form1_Click(object sender, EventArgs e)
{
    MakeTextBoxReadOnly(itxt_CommonTitle);
}


private Color origTextBoxBackColor = SystemColors.Control;

private void MakeTextBoxEditable(TextBox textBox)
{
    origTextBoxBackColor = textBox.BackColor;
    textBox.ReadOnly = false;
    textBox.BackColor = Color.White;
    textBox.Focus();
}

private void MakeTextBoxReadOnly(TextBox textBox)
{
    textBox.ReadOnly = true;
    textBox.BackColor = origTextBoxBackColor;
}