C# 如何在按键时正确关闭文本框菜单项
我用径向仪表显示温度。用户应该能够重命名每个仪表,而双击名称是不可能的,因此我必须创建一个菜单,用户可以在其中更改仪表的名称 我通过为每个仪表制作一个菜单项来解决这个问题。因此,当您单击菜单项(例如“温度计1”)时,将出现C# 如何在按键时正确关闭文本框菜单项,c#,winforms,visibility,menuitem,toolstrip,C#,Winforms,Visibility,Menuitem,Toolstrip,我用径向仪表显示温度。用户应该能够重命名每个仪表,而双击名称是不可能的,因此我必须创建一个菜单,用户可以在其中更改仪表的名称 我通过为每个仪表制作一个菜单项来解决这个问题。因此,当您单击菜单项(例如“温度计1”)时,将出现ToolStripTextBox类型的子菜单,其中包含文本框中的相同文本。在该文本框中用户可以更改名称。我希望当用户在TextBox中按Enter键时,TextBox菜单项关闭,但父菜单项“Theremoter1”保持打开状态。(温度计1、温度计2……在关闭文本框菜单项后不会消
ToolStripTextBox
类型的子菜单,其中包含文本框中的相同文本。在该文本框中
用户可以更改名称。我希望当用户在TextBox
中按Enter键时,TextBox菜单项关闭,但父菜单项“Theremoter1”保持打开状态。(温度计1、温度计2……在关闭文本框菜单项后不会消失。)
下面是我用来关闭TextBox
菜单的代码:
private void thermometer1ToolStripMenuItem1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r')
{
thermometer1ToolStripMenuItem1.Visible = false;
}
}
但正如您所看到的,小的白色条始终可见。有人能帮我吗
当用户按Enter键时,如何正确关闭ToolStripTextBox
菜单项?那个小白条不应该一直可见
我想您需要删除子项,而不是使其可见或不可见。
我相信你的问题与温度计上有一个“看不见”的孩子有关。
尝试删除子项。我想您需要删除子项,而不是使其可见或不可见。
我相信你的问题与温度计上有一个“看不见”的孩子有关。
尝试删除子项。关闭下拉列表的正确方法
设置项目的可见
不是您需要的。当您想要关闭一个菜单项时,只需找到它的所有者即可,并调用它的close
方法:
private void someToolStripMenuItem_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
var item = (ToolStripItem)sender;
var owner = (ToolStripDropDown)(item.Owner);
owner.Close();
}
}
这样,您就不会遇到小白条问题,因为您关闭了下拉列表。但是,当您没有关闭下拉列表,而是将项目的visible of设置为false
,下拉列表仍然打开,不包含元素,因此显示为白色小条
小条问题是什么?
您看到的白色小条是一个未包含任何上述项目的开口条
只有在下拉列表打开时删除下拉列表的所有项目时,才会发生此情况;在这种情况下,下拉列表保持打开状态,不包含任何项目。一旦关闭下拉列表,它将消失,并且不会通过指向其父项显示
如果使关闭下拉列表的所有项目不可见,则该下拉列表将不会通过指向其父项而显示。开放下拉列表也需要这种行为,问题需要解决
可以检查使其不可见的项目的所有者是否不包含其他可见项目,然后使其也不可见。项目的所有者是保持打开状态的下拉列表
private void someToolStripMenuItem_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
var item = (ToolStripItem)sender;
item.Visible = false;
var owner = (ToolStrip)(item.Owner);
owner.Visible = owner.Items.Cast<ToolStripItem>().Any(x => x.Visible);
}
}
private void someToolStripMenuItem\u按键(对象发送方,按键事件参数e)
{
如果(e.KeyChar==(char)Keys.Enter)
{
变量项=(ToolStripItem)发送方;
可见项=假;
var所有者=(工具条)(项目所有者);
owner.Visible=owner.Items.Cast().Any(x=>x.Visible);
}
}
关闭下拉列表的正确方法
设置项目的可见
不是您需要的。当您想要关闭一个菜单项时,只需找到它的所有者即可,并调用它的close
方法:
private void someToolStripMenuItem_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
var item = (ToolStripItem)sender;
var owner = (ToolStripDropDown)(item.Owner);
owner.Close();
}
}
这样,您就不会遇到小白条问题,因为您关闭了下拉列表。但是,当您没有关闭下拉列表,而是将项目的visible of设置为false
,下拉列表仍然打开,不包含元素,因此显示为白色小条
小条问题是什么?
您看到的白色小条是一个未包含任何上述项目的开口条
只有在下拉列表打开时删除下拉列表的所有项目时,才会发生此情况;在这种情况下,下拉列表保持打开状态,不包含任何项目。一旦关闭下拉列表,它将消失,并且不会通过指向其父项显示
如果使关闭下拉列表的所有项目不可见,则该下拉列表将不会通过指向其父项而显示。开放下拉列表也需要这种行为,问题需要解决
可以检查使其不可见的项目的所有者是否不包含其他可见项目,然后使其也不可见。项目的所有者是保持打开状态的下拉列表
private void someToolStripMenuItem_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
var item = (ToolStripItem)sender;
item.Visible = false;
var owner = (ToolStrip)(item.Owner);
owner.Visible = owner.Items.Cast<ToolStripItem>().Any(x => x.Visible);
}
}
private void someToolStripMenuItem\u按键(对象发送方,按键事件参数e)
{
如果(e.KeyChar==(char)Keys.Enter)
{
变量项=(ToolStripItem)发送方;
可见项=假;
var所有者=(工具条)(项目所有者);
owner.Visible=owner.Items.Cast().Any(x=>x.Visible);
}
}
“我希望当您按enter键时,文本框将消失”-这正是发生的情况,那么您的问题是什么?您希望关闭所有菜单还是部分菜单?问题出在白色条上,请查看刷新表单是否解决了问题this.Refresh()代码>白色栏是一个没有显示任何项目的菜单。你到底想发生什么?在右边的第一张图片中,你可以看到完整的菜单项显示,文本为“温度计1”的文本框,因此不仅文本框应该消失,而且整个菜单项“我希望当你按enter键时,文本框会消失”-这就是正在发生的事情,那么你的问题是什么?您希望关闭所有菜单还是部分菜单?问题出在白色条上,请查看刷新表单是否解决了问题this.Refresh()代码>白色栏是一个没有显示任何项目的菜单。你到底希望发生什么?完整的菜单项显示出来,你可以在右边的第一张图片中看到,文本为“温度计1”的文本框,因此不仅文本框应该消失,整个菜单项也应该消失,而且当我删除时