Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 在vb.net 2010中锚定窗体_Winforms_Anchor_Vb.net 2010 - Fatal编程技术网

Winforms 在vb.net 2010中锚定窗体

Winforms 在vb.net 2010中锚定窗体,winforms,anchor,vb.net-2010,Winforms,Anchor,Vb.net 2010,我的问题是如何将子mdi锚定到其父mdi,以便每次用户扩展或最小化父窗体时,子窗体都会自动跟随。我已经尝试过在表单中使用resize函数,但是没有任何帮助 感谢所有帮助,请参见下文-我编写的一个快速版本,它似乎可以处理大多数锚定场景。您可能需要稍微润色一下这段代码。但这应该让你开始: 导入System.ComponentModel 公共类子窗体 Dim p_eMyAnchor担任主持人 Dim p_MDI作为窗体 Dim p_iOldHeight,p_iOldWidth为整数 公共财产我的主播作

我的问题是如何将子mdi锚定到其父mdi,以便每次用户扩展或最小化父窗体时,子窗体都会自动跟随。我已经尝试过在表单中使用resize函数,但是没有任何帮助
感谢所有帮助,请参见下文-我编写的一个快速版本,它似乎可以处理大多数锚定场景。您可能需要稍微润色一下这段代码。但这应该让你开始:

导入System.ComponentModel
公共类子窗体
Dim p_eMyAnchor担任主持人
Dim p_MDI作为窗体
Dim p_iOldHeight,p_iOldWidth为整数
公共财产我的主播作为主播
得到
返回p_eMyAnchor
结束
设置(值为锚点样式)
p_eMyAnchor=值
chkAnchorTop.Checked=(p_eMyAnchor And AnchorStyles.Top)
chkAnchorLeft.Checked=(p_eMyAnchor And AnchorStyles.Left)
chkAnchorRight.Checked=(p_eMyAnchor And AnchorStyles.Right)
chkAnchorBottom.Checked=(p_eMyAnchor And AnchorStyles.Bottom)
端集
端属性
次新
'设计器需要此调用。
初始化组件()
'在InitializeComponent()调用之后添加任何初始化。
p_eMyAnchor=主持人风格。左侧或主持人风格。顶部
端接头
公共子ShowAsMDIChild(MDI父级作为表单)
p_MDIPRENT=MDIPRENT
Me.MdiParent=MdiParent
AddHandler mdiParent.ResizeBegin,MDIParentForm\u ResizeBegin的地址
AddHandler mdiParent.ResizeEnd,MDIParentForm\u ResizeEnd的地址
给我看
端接头
私有子MDIParentForm_ResizeBegin(发送方作为对象,e作为事件参数)
Dim frm As Form=DirectCast(发送方,表单)
p_iOldWidth=第一米宽度
p_iOldHeight=第一米高度
端接头
私有子MDIParentForm_ResizeEnd(发送方作为对象,e作为事件参数)
Dim parentForm As Form=DirectCast(发送方,表单)
“水平锚的处理”
Dim deltaWidth作为整数=parentForm.Width-p_iOldWidth
Dim fAnchorLeft作为布尔值=p_eMyAnchor和主播样式。左
Dim fAnchorRight为布尔=p_eMyAnchor和主播风格。对
选择Case fAnchorLeft
大小写正确:如果fAnchorRight,那么Me.Width+=deltaWidth
案例错误
单个尺寸系数=If(fAnchorRight,1,0.5)
Me.Left+=三角宽度*系数
结束选择
“垂直锚固的处理
Dim deltaHeight As Integer=parentForm.Height-p_iOldHeight
Dim fAnchorTop作为布尔值=p_eMyAnchor和主播样式。Top
Dim fAnchorBottom作为布尔值=p_eMyAnchor和主播样式。底部
选择Case fAnchorTop
大小写正确:如果是fAnchorBottom,那么Me.Height+=deltahHeight
案例错误
单个尺寸系数=If(扇形底部,1,0.5)
Me.Top+=德尔塔赫特*coef
结束选择
端接头
末级
对于水平锚定,使用以下规则:

  • 左-什么也不发生(默认行为)
  • 左侧和右侧-将宽度扩展到父窗体宽度增量
  • 右-按父窗体宽度增量向左移动
  • 无锚定-左移一半父窗体宽度增量
同样的原则适用于垂直锚定,分别适用于顶部和底部


你可以得到完整的项目。

我认为这是不可能的。MDI父项和子项处于不同的关系中,子项不应以任何方式对父项大小作出反应,除非子项已停靠/最大化。这意味着我无法以编程方式更改子窗体的大小?我希望每次调整父窗体的大小时都能得到它的大小,然后将它与子窗体的大小相等。您可以这样做,但这并不意味着您应该这样做。用户在使用MDI界面时有一定的期望。其中一个就是我所描述的。如果你真的想要这个功能,你需要通过处理MDIParent的Resize或ResizeBegin和ResizeEnd处理程序来手动实现它——我会尽量让一个示例项目在时间允许的情况下为你工作。