我正在使用径向仪表来显示温度。用户应该可以重命名每个仪表,双击名称是不可能的,所以我必须创建一个菜单,用户可以在其中更改仪表的名称。
我通过为每个仪表制作一个菜单项来解决这个问题。因此,当您单击菜单项,例如"温度计1"时,将出现类型为ToolStripTextBox
的子菜单,其中包含TextBox
中的相同文本。在TextBox
中,用户可以更改名称。我希望当用户在TextBox
中按 Enter 时,文本框菜单项将关闭,但是父菜单项" Theremometer1"继续开放。 (温度计1,温度计2,......关闭文本框菜单项后不会消失。)
以下是我用来关闭TextBox
菜单的代码:
private void thermometer1ToolStripMenuItem1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r')
{
thermometer1ToolStripMenuItem1.Visible = false;
}
}
但是你可以看到小白条保持可见。有人能帮帮我吗?
当用户按 Enter 时,如何正确关闭ToolStripTextBox
菜单项?那小白条不应该保持可见。
答案 0 :(得分:3)
关闭下拉列表的正确方法
设置项目Visible
不是您需要的。当您想要关闭菜单项时,它足以找到它的所有者ToolStripDropDown
并调用其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();
}
}
这样你就不会面对那个小白条问题了,因为你关闭了下拉列表。但是,当您将项目的可见项设置为false
而不是关闭下拉列表时,下拉列表仍然打开,不包含元素,因此它显示为小白条。
小条问题是什么?
您看到的小白条是一个开放的ToolStripDropDown
,不包含上述任何项目。
仅当下拉列表打开时删除下拉列表中的所有项目时才会出现此情况;在这种情况下,下拉列表保持打开状态,不包含任何项一旦关闭下拉列表,它就会消失,并且不会通过指向其父级来显示。
如果您使关闭的下拉列表中的所有项目都不可见,则下拉列表将不会通过指向其父级来显示。打开下拉列表也需要此行为,问题需要解决方法。
您可以检查您隐藏的项目的所有者是否包含其他可见项目,然后使其也不可见。该项目的所有者是该下拉列表保持打开状态。
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);
}
}
答案 1 :(得分:0)
我猜你需要删除子项而不是让它可见。 我相信你的问题与一个&#34;隐形&#34;来自Thermometer1的孩子。 尝试删除子项。