Использование System.Windows.Forms в макросе Visual Studio - PullRequest
1 голос
/ 22 мая 2009

Я начал писать макрос в Visual Studio 2005 следующим образом:

Public Sub myMacro()
    Dim myListBox As New System.Windows.Forms.ListBox()
    For Each x As String In xs
        myListBox.Items.Add(x)
    Next

Но я совершенно не понимаю, как отобразить ListBox,

Мне бы хотелось, чтобы поведение было похожим на этот пример InputBox:

Dim str As String = InputBox("title", "prompt")

Как мы видим, InputBox может быть сконструирован и отображен на экране немедленно, возвращая String после закрытия окна.

Я попытался вызвать следующие методы на myListBox после заполнения его String s в xs, но ListBox по-прежнему не появляется на экране:

myListBox.EndUpdate()
myListBox.Show()

Я также попытался создать System.Windows.Forms.Form и добавить к нему ListBox, следуя подходу, аналогичному описанному для кнопки здесь (в разделе Примеры, Visual Basic) . Снова ничего не появляется на form.ShowDialog() вызове.

1 Ответ

6 голосов
/ 21 июня 2009

Приведенный ниже код отлично работал для меня в Visual Studio 2008. Когда я открывал IDE макросов, ссылка на System.Windows.Forms уже существовала, мне просто нужно было добавить Imports System.Windows.Forms в верхней части модуля.

Public Sub myMacro()

    Dim myListBox As New ListBox
    Dim xs As String() = New String() {"First", "Second", "Third", "Fourth"}

    For Each x As String In xs
        myListBox.Items.Add(x)
    Next

    Dim frm As New Form
    Dim btn As New Button

    btn.Text = "OK"
    btn.DialogResult = DialogResult.OK

    frm.Controls.Add(btn)
    btn.Dock = DockStyle.Bottom

    frm.Controls.Add(myListBox)
    myListBox.Dock = DockStyle.Fill

    If frm.ShowDialog() = DialogResult.OK Then
        MessageBox.Show(myListBox.SelectedItem)
    End If

End Sub
...