通过ContextMenuStrip-c#winform使文本框可编辑
我的C#Winform中有一个文本框。默认情况下,程序会为文本框指定一个值 我希望用户有一个右键单击功能,在运行时编辑此文本。因此,当用户右键单击进行编辑时,背景应该变成白色,用户应该能够编辑文本。编辑后,背景应恢复为默认值且不可编辑 我创建了一个带有右键单击事件的ContextMenuStrip,以按如下方式编辑文本,并在用户右键单击并按“编辑”菜单项时将readonly属性指定为false:通过ContextMenuStrip-c#winform使文本框可编辑,c#,winforms,textbox,contextmenustrip,C#,Winforms,Textbox,Contextmenustrip,我的C#Winform中有一个文本框。默认情况下,程序会为文本框指定一个值 我希望用户有一个右键单击功能,在运行时编辑此文本。因此,当用户右键单击进行编辑时,背景应该变成白色,用户应该能够编辑文本。编辑后,背景应恢复为默认值且不可编辑 我创建了一个带有右键单击事件的ContextMenuStrip,以按如下方式编辑文本,并在用户右键单击并按“编辑”菜单项时将readonly属性指定为false: private void editTextToolStripMenuItem_Click(objec
private void editTextToolStripMenuItem_Click(object sender, EventArgs e)
{
itxt_CommonTitle.ReadOnly = false;
}
我不知道如何进一步进行。使用textbox是否可能实现此功能?我认为您缺少一个过程。编辑后,应该有一个更新或保存方法
private void buttonSave_Click(object sender, EventArgs e)
{
textBox1.ReadOnly = true;
}
private void editToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.ReadOnly = false;
}
您不需要更改背景色,只需只读道具即可。我认为您缺少一个过程。编辑后,应该有一个更新或保存方法
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()工作正常。。。谢谢,布莱恩工作得很好。。。谢谢你,布莱恩