2010-01-13 2 views
4

예 및 아니오 단추를 사용하여 PowerShell에서 메시지 상자를 표시하려고합니다.MessageBox.Show()를 기본 버튼 이상으로 PowerShell에서 호출 하시겠습니까?

[system.windows.forms.messagebox]::show("Hello, world!") 

을 그리고 내가 원하는 버튼의 변수 $ 버튼을 만들 수 있습니다 :

나는 OK 버튼이있는 메시지 상자를 표시 할 수 있습니다 내가보기 것을 볼 수 있습니다

$buttons=[system.windows.forms.messageboxbuttons].yesno 

과() 정적 메서드가 오버로드되고 옵션 중 하나가 세 개의 매개 변수를 제공하는 것입니다.

표시 (String, String, MessageBoxButtons) Dis 지정된 텍스트, 캡션 및 단추가있는 메시지 상자를 재생합니다. (?)

그래서 자연스럽게 내가이 전화를하기로 결정

[system.windows.forms.messagebox]::show("Are you sure?","",$buttons) 

을 그리고이 오류가 발생합니다

"쇼"에 대한 과부하 인수 수를 찾을 수 없습니다 : "삼".

그러나 세 가지 인수를 허용하는 "표시"에 과부하가 있습니다!

내가 뭘 잘못하고 있니?

(PowerShell의 방법은 일반적으로 도트 구문을 사용하여 수행됩니다 호출 왜 누군가가 말해 줄 수?. object.method을()하지만 필요 "::"메시지 박스 클래스 그것은 혼란이)

답변

5

올바른 방법은

$buttons=[system.windows.forms.messageboxbuttons]::yesno; 
[system.windows.forms.messagebox]::Show("Are you sure?","",$buttons); 

통지 할 수있다 "::"대신 "." 첫 줄에. Yes No 값은 System.Windows.Forms.Messageboxbuttons에서 정적으로 정의되므로 "."대신 "::"(정적 호출)을 사용해야합니다.

하는 것으로는 "[system.windows.forms.messageboxbuttons] .yesno는"존재하고 따라서 $ null로 발생하지 않습니다 System.Type의 인스턴스에 "예 아니요"속성을 호출하기위한 시도이다

희망이 있습니다.

세드릭

편집 --- 열거 더 우아한 위해 파워 쉘에 의해 암시 적 캐스트를 사용하여

키스 솔루션입니다. PS V2 CTP 3에서는 작동하지 않지만 RTM 버전에서는 제대로 작동합니다. 완전한 설명은 가치가 있었지만 ...

+0

저는 정적 호출을했지만 왜 PowerShell이 ​​그 차이를 만들지 설명 할 수 없었습니다. MessageBox는 객체가 아니라 클래스임이 분명합니다. 그러므로 :: 대신에. 불필요한 것 같습니다. 인터프리터가 필요하지 않고 사용자에게 혼란을주는 이유가 더 정확한 구문을 추가해야하는 이유는 무엇입니까? –

+0

사용되는 구문 (예 : :: 또는.)에 따라 [YourType]은 C# typeof (YourType) 또는 정적 메서드에 액세스하기위한 경로와 동일합니다. 통역관은 당신이하고 싶은 것을 알 필요가 있습니다! 어떻게 하시겠습니까? –

+0

나는 C#처럼 그것을 할 것이라고 생각한다. –

5

시도 이 방법 :

[windows.forms.messagebox]::show('body','title','YesNo') 

그리고 ::.를 사용 사이의 차이는 인스턴스 메서드 대 정적 방법이다. 우리가 MessageBox 객체를 만들지 않았다는 것을 상기하라. :: 구문과 함께 MessageBox에서 정적 메서드를 사용하고 있습니다.

이 일을
+0

Ok for :: vs.로 해결되었지만 해결책이 작동하지 않습니다 (OP와 동일한 메시지) ... 아마도 과부하 해결 문제가 ... 괜찮을 것입니다. 명시 적 캐스트 –

+0

PowerShell 1.0과 2.0 모두에서 작동하는지 확인했습니다. Windows Forms 어셈블리를 가져오고 있습니까? Add-Type -AssemblyName System.Windows.Forms? –

+0

어셈블리가 추가되었습니다. 나는 아직도 CTP를 사용하고있다. 아, 그리고 메시지는 'Show'에 대해 여러 모호한 오버로드가 발견되고 인수 개수가 '3' '입니다. –

관련 문제