我想让我的VBScript显示Windows另存为对话框,但我找不到如何做到这一点.
使用此代码:
Dim sfd
Set sfd = CreateObject("UserAccounts.CommonDialog")
sfd.ShowOpen
Run Code Online (Sandbox Code Playgroud)
我可以得到一个Open对话框,但是没有ShowSave这个对象的方法(因为在Visual Basic非脚本中似乎有类似的对象).
我搜索了StackOverflow并搜索了"[vbscript] save dialog"(以及"Windows Script Host"),但我只找到了关于从网页访问常用对话框的线程和BrowseForFolder对话框的解决方案,而没有关于调用Save对话框的内容.
实际上,我可以使用"打开"对话框来实现我的目的,因为我只需要一个文件名...但是由于我想将某些东西保存到选定的路径,对话框的标题栏中的"另存为"会更合适.
如果它们的字段之一相等,我希望特定类的对象相等。如何为这样的类编写一致的 hashCode 方法?
(免责声明,因为我知道这不是最佳实践:该类是另一个类的包装器,应该用于 Maps 中的键。这两个不同的具有相同字段的对象将导致相同的 Map 条目。实际上每个字段都会自行识别底层对象,但我并不总是为两个可用对象提供相同的识别字段。我无法控制并因此更改这种“模棱两可”的识别机制。解决这个问题的替代解决方案也是受欢迎的。)
是否有相应的实施 hashCode() 的策略?我只知道在 equals 中涉及连接(如 &&)的实现。如果任何一个字段相等,如何确保 hashCode() 相同?
这是简化的 equals 方法,我想为其编写一致的 hashCode() 实现:
public boolean equals(C other)
{
return (field1 != null && field1.equals(other.field1))
|| (field2 != null && field2.equals(other.field2))
|| (field3 != null && field3.equals(other.field3));
}
Run Code Online (Sandbox Code Playgroud)
编辑:根据输入数据,不会出现 (1, 2, 3) 等于 (1, 6, 7) 的情况。生成的对象仅使得某些字段可以为空,但不会像示例中那样自相矛盾。简单地说,实际上等于 (1, 2, 3) 的唯一组合应该是 (1, 2, 3), (1, null, null), (null, 2, null), (1, 2, null) 和等等。我承认这种方法不是特别可靠。
我有一个表单,上面有一些控件(面板、分组框等),所有这些都已control.Dock = DockStyle.Top设置。根据窗体上组合框的选定值,只有其中一些面板应该同时可见(因为隐藏的面板不适用于选定的选项)。对接是为了让UI看起来更紧凑。
每当 ComboBox 选择更改时以及在 Form 的 Shown 事件中,这些面板的 Visible 属性都会更改(因为当首次显示 Form 并且 ComboBox 选择尚未更改时,并非所有面板都应该可见)。
现在,问题是,当我关闭窗体时(因为它是一个模式对话框,它没有被破坏),稍后重新打开它并更改组合框选择,窗体顶部面板的显示顺序已更改。直到表单关闭一次后才会发生这种情况。我知道停靠控件的显示顺序与父控件的 ControlCollection 中这些控件的顺序相关联。这也决定了控件的 z 顺序,因此决定了问题的标题。
是什么导致控制顺序发生变化以及如何避免它?