C# 设置UserControl的Location属性不会更新y值

C# 设置UserControl的Location属性不会更新y值,c#,winforms,location,autoscroll,C#,Winforms,Location,Autoscroll,我有一个UserControl(winforms)放在一个表单上(实际上是一个Weifen.Luo.DockContent,它同样来自基本表单)自动滚动已为表单启用,可以通过拖动在表单上移动控件(更精确的方法是计算鼠标向下,鼠标移动,鼠标移动,并更新位置) 有时*当到达边界时(因此窗体的平面必须进一步放大),更新控件的位置突然停止工作;设置位置=…失败。要在调试时演示即时窗口中的代码段,请执行以下操作: >Location {X = 50 Y = 751} IsEmpty: fal

我有一个
UserControl
(winforms)放在一个表单上(实际上是一个
Weifen.Luo.DockContent
,它同样来自基本表单)<代码>自动滚动已为表单启用,可以通过拖动在表单上移动控件(更精确的方法是计算
鼠标向下
鼠标移动
鼠标移动
,并更新
位置

有时*当到达边界时(因此窗体的平面必须进一步放大),更新控件的位置突然停止工作;设置
位置=…
失败。要在调试时演示即时窗口中的代码段,请执行以下操作:

>Location
{X = 50 Y = 751}
    IsEmpty: false
    X: 50
    x: 50
    Y: 751
    y: 751
但是在更新之后

>Location = new Point(30, 40);
>Location
{X = 30 Y = 751}
    IsEmpty: false
    X: 30
    x: 30
    Y: 751
    y: 751
。。y值仍然保持不变。这怎么可能?似乎有一个附加的LocationChanged处理程序(在用户代码之外)对我不利。有什么提示吗

*)尽管我无法找到它发生时的确切情况,但我找到了复制它的方法,例如,将文本框聚焦在控件上,然后将其移动到边缘,或者向控件添加(空!)
Load
事件处理程序-奇怪。我知道这听起来更像是比赛条件。但目前我还不知道去哪里搜索


更新:每次更新失败时,父窗体的
AutoScrollPosition
都会更新,结果是delta(AutoScrollPosition前后)=delta(Location,newValueForLocation)