2016-12-01 2 views
-1

Я создал простую форму в DLL для отображения/вызова через VBScript.Показать WinForm (C#) из DLL в vbscript

namespace Playground_DLL 
{ 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.DialogResult = System.Windows.Forms.DialogResult.OK; 
    } 

    public void ShowForm() 
    { 
     this.Show(); 
    } 

    [ComVisible(true)] 
    public void Hello() 
    { 
     MessageBox.Show("Hello"); 
     Application.Run(this); 

    } 
} 

Я пытаюсь получить DialogResult этой формы после нажатия кнопки. Но я изо всех сил стараюсь сделать форму видимой. DLL зарегистрирована и форма может быть создана из vbscript. Но после вызова метода form.ShowDialog() скрипт останавливается (или ждет завершения диалога), но форма не показана.

Только если я вызываю (экспериментальную) функцию Hello(), форма видна. (но только если я показываю сообщение перед вызовом application.run).

Что мне не хватает или что-то не так?

Вот мой фрагмент vbscript.

(Весь сценарий и форма не очень-то делать. Это просто, чтобы узнать/понять новые концепции)

Dim test 
Set test = CreateObject("Playground_DLL.Form1") 
test.topMost = True 
test.Hello() 
Msgbox(test.DialogResult) 


Dim test 
Set test = CreateObject("Playground_DLL.Form1") 
test.topMost = True 
Dim result 
result = test.ShowDialog() 
Msgbox(result) 
+0

Простой поиск в Google о том, как вызвать C# Dll из VB Script .. Вы хотя бы подумали, что это сделать? – MethodMan

+0

Проблема не вызывает DLL. Это работает. Это форма, которая не появляется. – Knoffel

+0

Возможный дубликат [Создать графический интерфейс в C# и вызов в VBScript] (http://stackoverflow.com/questions/10943253/create-gui-in-c-sharp-and-call-in-vbscript) – Lankymart

ответ

-1

Вы инициализировать окно, но никогда не показывают. Ваше упорядочение и синтаксис отключены ...

public void ShowForm() 
{ 
    this.Show(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Hello();  //Display your MessageBox based on the button click 
    this.DialogResult = System.Windows.Forms.DialogResult.OK; 
} 

public void Hello() 
{ 
    MessageBox.Show("Hello"); 
} 

Dim test 
Set test = CreateObject("Playground_DLL.Form1")  //This is where you initialize 
test.topMost = true 
//test.Hello()          //This is to display the message box - not Form1 
test.ShowForm();         //This displays Form1 
+1

Хорошо вызывающий тест. ShowDialog() должен отображать форму видимой, не так ли? Но ничего не происходит. Игнорировать Hello() и ShowForm(), которые были предназначены только для тестирования. ShowDialog/Show - это встроенные функции формы для отображения моей формы после инициализации. Но это не делает его видимым. – Knoffel

+0

try 'test.Visibile = true;' –

+0

приводит к ошибке, заявив, что форма уже отображается во время вызова ShowDialog() – Knoffel

Смежные вопросы