Почему c # winform не отображается при вызове из vbscript - PullRequest
1 голос
/ 16 августа 2011

Я написал API на C #, который будет использоваться в vb6 & vbscript, и предполагаю, что мои данные API такие, как показано ниже:
1. В API есть форма, но она не доступна для COM
2. есть метод ShowForm () с кодом «form1.Show ()».Этот метод ShowForm () доступен для COM, поэтому я могу вызывать этот метод из vb6 / vbscript.

Итак, моя проблема:
Когда я вызываю метод ShowForm () в vb6 при событии нажатия кнопкипоявляется форма, созданная в C # API, но если я создаю экземпляр того же класса и вызываю тот же метод в vbscript, форма не отображается.

Однако, если я изменю код в ShowForm (),
- с "form1.Show ()" на "form1.ShowDialog ()", он будет отображаться в обоих vb6 / vbscript.Но это показано как модальная форма, где то, что я хочу, это немодальное ИЛИ
- от «form1.Show ()» до «Application.Run (form1)».Она будет отображаться в vbscript, но не в vb6 (на самом деле она появляется в vb6, но вылетает после закрытия формы в C #)

Что я могу сделать, чтобы она работала нормально в vb6 и vbscript?Ваш совет очень ценится

PS: это не проблема синтаксиса сценария или проблема COM.это должно быть как-то связано с form.show () / ShowDialog () / Application.Run () или вещью цикла сообщений, что я не совсем понимаю

Мой код был бы более или менее похож на этот.

//C# code
public void ShowForm()
{
 m_frm.tempWebBrowser.Navigate("http://stackoverflow.com", "_self", Encoding.Default.GetBytes(""), "Content-Type: application/x-www-form-urlencoded");

 m_frm.FormBorderStyle = FormBorderStyle.Sizable;
 m_frm.ShowInTaskbar = true;
 m_frm.WindowState = FormWindowState.Maximized;
 m_frm.tempWebBrowser.Visible = true;

 m_frm.Show();     
}

//VB6 code, vbscript also using exactly the same code in the event
Private Sub Command1_Click()
 Dim tempClass
 Set tempClass = CreateObject("myClass.API")
 tempClass.ShowForm
End Sub

1 Ответ

0 голосов
/ 18 августа 2011

Форма не отображается точно из-за того, что вы предложили ... в потоке не работает насос сообщений.Если вы пытаетесь запустить и забыть окно C # из VBScript, я предлагаю вам запустить его в отдельном процессе.Это будет иметь такой же эффект, как вы описали.Если вы вместо этого пытались запустить его и подождать, пока пользователь не будет взаимодействовать с ним (скажем, вы запрашиваете у него информацию), тогда уместно показывать форму модально.

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