我正在使用Windows.Forms.ToolStripControlHost类将拾色器嵌入到上下文菜单中。选择器显示正常并正确处理所有鼠标事件:
双击其中一个通道滑块时出现问题。这会导致控件将Windows.Forms.TextBox添加到父控件中,其尺寸与滑块相同,因此用户可以输入数值。当TextBox具有焦点时按Enter键时,它应该分配值并隐藏文本框(它会这样做),但它也会关闭整个菜单结构。那么,我如何让菜单保持活力?
涉及了大量代码但如果需要我会发布。
答案 0 :(得分:1)
不知何故,你需要先按 Enter 按键才能进入上下文菜单。显然,它的默认行为是当用户按下 Enter 时“选择”当前突出显示的项目,就像人类已知的每个其他菜单控件一样。
您可以通过继承ContextMenuStrip
控件(如果您还没有这样做)并覆盖其ProcessCmdKey
method来实现。请注意与keyData
对应的Keys.Enter
值,当您检测到该值时,请返回True
以指示该控件已处理该字符并阻止其传递给任何进一步处理。当然,其他所有内容都会让基类进程处理,以便其他键(例如箭头键)的行为保持不变。
例如(我刚测试过它并且工作正常):
public class CrazyContextMenuStrip : ContextMenuStrip
{
protected override bool ProcessCmdKey(ref Message m, Keys keyData)
{
if (keyData == Keys.Enter)
{
// Eat it when the user presses Enter to
// prevent the context menu from closing
return true;
}
// Let the base class handle everything else
return base.ProcessCmdKey(m, keyData);
}
}
当然,您可以在上面的代码中添加额外的检查,以便只有当您的颜色选择器可见时才会按下 Enter 键,这样就可以按预期工作了所有剩下的部分。时间,