通过ContextMenuStrip-c#winform使文本框可编辑

通过ContextMenuStrip-c#winform使文本框可编辑,c#,winforms,textbox,contextmenustrip,C#,Winforms,Textbox,Contextmenustrip,我的C#Winform中有一个文本框。默认情况下,程序会为文本框指定一个值 我希望用户有一个右键单击功能,在运行时编辑此文本。因此,当用户右键单击进行编辑时,背景应该变成白色,用户应该能够编辑文本。编辑后,背景应恢复为默认值且不可编辑 我创建了一个带有右键单击事件的ContextMenuStrip,以按如下方式编辑文本,并在用户右键单击并按“编辑”菜单项时将readonly属性指定为false: private void editTextToolStripMenuItem_Click(objec

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

我希望用户有一个右键单击功能,在运行时编辑此文本。因此,当用户右键单击进行编辑时,背景应该变成白色,用户应该能够编辑文本。编辑后,背景应恢复为默认值且不可编辑

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

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

我不知道如何进一步进行。使用textbox是否可能实现此功能?

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

  • textbox readonly=true
  • 编辑文本框:文本框只读=假
  • 按钮保存:文本框readonyl=true 编辑: 大概是这样的:

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

    您不需要更改背景色,只需只读道具即可。

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

  • textbox readonly=true
  • 编辑文本框:文本框只读=假
  • 按钮保存:文本框readonyl=true 编辑: 大概是这样的:

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

    你不需要改变背景色,只要只读道具就可以了。

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

    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;
    }
    

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

    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;
    }
    

    您应该设置为false。您是说只想右键单击文本框立即变为可编辑,而不使用菜单?不。。。仅通过菜单项使其可编辑。我已经把它编辑好了。但我如何在编辑过程中更改背景并在编辑后返回默认值?何时完成编辑?何时单击文本框外部或winform上的任何位置。使其仅在contextmenustrip项时可编辑您应该设置为false。您是说只希望文本框在右键单击时立即可编辑,而不使用菜单?否。。。仅通过菜单项使其可编辑。我已经把它编辑好了。但我如何在编辑过程中更改背景并在编辑后返回默认值?何时完成编辑?何时单击文本框外部或winform上的任何位置。仅当contextmenustrip项不起作用时才使其可编辑。我创建了两个函数,一个用于编辑,一个用于更新。并将其放入菜单项中,单击。1) editTextbox()2)saveTextbox()不起作用。我创建了两个函数,一个用于编辑,一个用于更新。并将其放入菜单项中,单击。1) editTextbox()2)saveTextbox()工作正常。。。谢谢,布莱恩工作得很好。。。谢谢你,布莱恩