And*_*ehm 4 powershell winforms
我试图用PowerShell显示一个消息框,带有yes和no按钮.
我可以使用OK按钮显示一个消息框:
[system.windows.forms.messagebox]::show("Hello, world!")
Run Code Online (Sandbox Code Playgroud)
我可以使用我想要的按钮创建一个变量$按钮:
$buttons=[system.windows.forms.messageboxbuttons].yesno
Run Code Online (Sandbox Code Playgroud)
我可以看到Show()静态方法被重载,其中一个选项是给出三个参数:
Show(String,String,MessageBoxButtons)显示带有指定文本,标题和按钮的消息框.
那么自然(?)我决定这样称呼:
[system.windows.forms.messagebox]::show("Are you sure?","",$buttons)
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
找不到"Show"的重载和参数count:"3".
但是"Show"有一个超载,接受三个参数!
我究竟做错了什么?
(并且有人可以告诉我为什么在PowerShell中调用方法通常使用点语法:object.method(),但MessageBox类需要"::"?这令人困惑.)
试试这种方式:
[windows.forms.messagebox]::show('body','title','YesNo')
Run Code Online (Sandbox Code Playgroud)
而使用::
和.
静态方法与实例方法之间的区别.请注意,我们没有创建MessageBox对象.我们只是在MessageBox上使用静态方法和::
语法.
这样做的正确方法可以
$buttons=[system.windows.forms.messageboxbuttons]::yesno;
[system.windows.forms.messagebox]::Show("Are you sure?","",$buttons);
Run Code Online (Sandbox Code Playgroud)
注意"::"而不是"." 在第一行.YesNo值是在System.Windows.Forms.Messageboxbuttons上静态定义的,因此必须使用"::"(静态调用)而不是".".
请注意"[system.windows.forms.messageboxbuttons] .yesno"是尝试在System.Type的实例上调用"YesNo"属性,该实例不存在,因此导致$ null
希望能帮助到你 !
塞德里克
编辑---
Keith解决方案使用powershell为枚举制作的隐式转换更优雅.它只适用于我仍在使用的PS V2 CTP 3,但在RTM版本上运行良好.完整的解释值得给予,但......
归档时间: |
|
查看次数: |
15942 次 |
最近记录: |