【问题标题】:Excel 2007: Modelsss UserForm Z-OrderExcel 2007:Modelss 用户表单 Z 顺序
【发布时间】:2015-12-17 21:32:42
【问题描述】:

我正在创建一系列 Excel 2007 无模式用户表单,我希望根据需要对其进行 .Show 和 .Hide 操作。我试图理解的问题是如何使用 VBA 以编程方式更改它们的 z 顺序。有没有人有任何建议或者你能指出我的解决方案吗?

谢谢-

【问题讨论】:

  • 这可能对你有帮助:ozgrid.com/forum/showthread.php?t=92064
  • 感谢拉尔夫的回复。那篇文章是关于更改位于用户窗体上的控件的 z 顺序。我需要自己操作用户窗体的 z 顺序,而不是他们的控件。
  • 我的表单也是无模式的

标签: excel userform z-order vba


【解决方案1】:

经过大量研究后,我最终决定使用 Windows API 来管理 VBA 用户窗体 Z 顺序。具体来说,SetWindowPos API 函数使用其 hWndInsertAfter 参数处理窗口 Z 顺序。我从未发现任何可以设置用户窗体 Z 顺序的本机 VBA 方法或属性(但我可能遗漏了一些东西)。

【讨论】:

  • 我一直在寻找同类型的方法。当我在以下堆栈溢出页面 (stackoverflow.com/questions/20352422/…) 中找到信息时,我满怀希望,但这似乎不起作用。
  • 只是作为更新。上述堆栈溢出页面上的解决方案确实对我有用。但是,出于某种原因,我只能在使用“With”/“End With”的情况下让它工作。我不能只说 txtBx.ZOrder msoSendToBack。至少我想不出不使用“With”格式来让它工作的方法。
  • @Fractal,如果我没记错的话,我的解决方案仅适用于表单窗口,不适用于表单上的单个控件。我似乎记得是这种情况,因为 SetWindowPos API 函数只处理窗口,不适用于单个控件。对于更改单个表单控件的 Z 顺序问题,我的解决方法是为每个表单创建多个版本并根据需要调用表单窗口。
  • 我没有使用 SetWindowPos API 函数。我最终使用了此页面 (stackoverflow.com/questions/20352422/…) 中的信息。另请查看 (msdn.microsoft.com/en-us/library/office/…)。 msdn 页面将为您提供可与 zorder 一起使用的所有选项的列表。这对于我想推到后面的标签控件非常有用。但我不得不使用'With/End With'。我的评论不能有多行,所以我将在下面的答案块中放一个示例代码
  • 好的,我刚刚阅读了上面的子评论。没有意识到这是关于表单窗口本身的 z 顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 2017-02-03
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多