如何初始化鼠标悬停弹出窗体相对于父窗体的起始位置?
解决方案
问题根源在于弹窗窗体的StartPosition属性默认值为WindowsDefaultLocation,系统会先将弹窗定位到屏幕左上角,之后才执行你设置的位置代码,所以出现了短暂的位置闪烁。
解决步骤:
设置弹窗的StartPosition为Manual
你可以在设计器中选中rolloverpopup,找到StartPosition属性并改为Manual;也可以在代码初始化弹窗的位置添加:rolloverpopup.StartPosition = FormStartPosition.Manual;保留并简化位置计算逻辑
你基于主窗体位置偏移的计算逻辑是可行的,修改后的事件代码可以更简洁:private void lblQuestionMark_MouseEnter(object sender, EventArgs e) { rolloverpopup.Location = new Point(this.Location.X + 280, this.Location.Y + 220); rolloverpopup.Show(); }
设置完成后,弹窗会直接以你指定的位置显示,不会再出现屏幕左上角闪烁的问题。如果后续主窗体位置变动,还可以监听主窗体的LocationChanged事件,同步更新弹窗位置。
内容的提问来源于stack exchange,提问作者Guy 4678
相关产品推荐
相关产品推荐

