在你得出结论并问“你为什么不只是Hide()
表格之前?”让我解释一下。
我有以下内容:
PDFViewer
。TextBoxForm
。PDFViewer
和TextBoxForm
的父表单(Owner
属性设置为此父级)。 TextBoxForm
是PDFViewer
的叠加层,应该在超出PDFViewer
范围时隐藏,如果用户滚动则可能会发生这种情况。以下是我实现这一目标的方法:
PDFViewer_OnScroll(object sender, HandledMouseEventArgs e){
TextBoxForm.SetBounds(GetBounds(PDFViewer));
TextBoxForm.Top = [some value];
}
ÌnsideTextBoxForm
我执行以下操作:
protected override void OnMove(EventArgs e)
{
base.OnMove(e);
UpdateFormRegion(); // Offset bounds so it's relative to the form itself instead of the screen
Invalidate();
}
当TextBoxForm
完全或部分位于PDFViewer
的范围内时,此方法正常工作,但只要它完全移到外部,TextBoxForm
之前呈现的任何部分仍将呈现(我认为这是因为Windows决定不需要重新绘制表单,当它不在自己的范围内时)。
检查发生这种情况很容易,但我不想拨打TextBoxForm.Hide()
的原因是因为这会导致TextBox
失去焦点。
任何方式我都可以隐藏窗体而不会失去焦点?
答案 0 :(得分:0)
我只是想到了一个可能的解决方案(不是非常优雅的解决方案):
Contacts.FirstName + " " + Contacts.LastName
基本上,无论何时移动/调整表单,我都会检查它是否完全在提供的范围之外,如果为真,则将其移出屏幕。
仍然欢迎不那么“hacky”的解决方案。