Вызовите Messagebox.Show () из PowerShell с кнопкой больше, чем по умолчанию? - PullRequest
4 голосов
/ 13 января 2010

Я пытаюсь показать окно сообщения из PowerShell с кнопками «да» и «нет».

Я могу отобразить окно сообщения с кнопкой «ОК»:

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

И я могу создатьпеременные $ кнопки с нужными мне кнопками:

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

И я вижу, что статический метод Show () перегружен и что один из вариантов - задать три параметра:

Показать (String, String, MessageBoxButtons) Отображает окно сообщения с указанным текстом, заголовком и кнопками.

Естественно (?) Я решил назвать это:

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

И это приводит к ошибке:

Не удается найти перегрузку для «Show» и счетчика аргументов: «3».

Но есть перегрузка для "Show", которая принимает три аргумента!

Что я делаю не так?

(А может кто-нибудь сказать мне, почему вызывается метод в PowerShellобычно делается с использованием точечного синтаксиса: object.method (), но требует "::" для класса MessageBox? Это сбивает с толку.)

Ответы [ 2 ]

5 голосов
/ 13 января 2010

Правильный способ сделать это может быть

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

Обратите внимание "::" вместо "." в первой строке. Значение YesNo определяется статически в System.Windows.Forms.Messageboxbuttons, поэтому вы должны использовать «::» (статический вызов) вместо «.»

Обратите внимание, что «[system.windows.forms.messageboxbuttons] .yesno» является попыткой вызвать свойство «YesNo» для экземпляра System.Type, которое не существует и поэтому приводит к $ null

Надеюсь, это поможет!

Седрик

Редактировать ---

Решение Кейта, использующее неявное приведение, сделанное powershell для enum, более элегантно. Это просто не работает на PS V2 CTP 3, который я все еще использую, но отлично работает на RTM версии. Полное объяснение стоило дать, хотя ...

5 голосов
/ 13 января 2010

Попробуйте так:

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

И различие между использованием :: и . - это статический метод против метода экземпляра. Обратите внимание, что мы не создали объект MessageBox. Мы просто используем статический метод в MessageBox с синтаксисом ::.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...