2009-08-17 14 views
0

私はカスタムフォームBを持っています。 BAによって作成され、ハンドルはB.VisibleChangedになります。VB.NETフォーム非表示の問題

Bには[OK]と[キャンセル]ボタンしかありません。また、OKを押したときにいくつかのロジックを実行します。

BのOKボタンは、次のように扱われる:

Me.Result = Windows.Forms.DialogResult.OK 
Me.Hide() 

Aのコードが正しくヒットして実行されますが、それは決してBを隠していません。 Bのプロパティの値を確認すると、Visible = Falseと表示されます。

誰もこの問題の原因を考えている人はいませんか?

編集 このフォームは、私がFlashWindow()を使用してフォームのフラッシュを持っているために、後で呼び出しを作ってるんだと、Show()コマンドを使用して示されました。

+1

あなたは正確に行うには何をしたいです。いくつかのサンプルコードを与えてください。 –

答えて

2

ご質問の内容が不明です。

  1. なぜ私を使用しないのですか。私の代わりに()を閉じます。
  2. 一度に複数のインスタンスを持つことはOKですか?そうでない場合は、ShowDialogに移動します。

質問を言い換えると、誰かが問題を解決できる可能性があります。

+0

私はもともとme.Closeを使用していましたが、かなり頻繁になる可能性のあるコードの特定のポイントに達するたびに新しいインスタンスをインスタンス化する必要がありました。私はShowDialogを使用しますが、FlashWindow()を使用することはできません。 –

+0

あなたはいくつかのコードを投稿できますか? – danish

+0

ShowDialogを使用すると、毎回新しいインスタンスを作成する必要はなく、同じインスタンスを閉じるとそれを破棄しないため、同じインスタンスを再利用できます。しかし、Showを呼び出すだけで、Closeを呼び出すと、フォームは自動的に破棄されます。 –

1

メッセージボックスにok &キャンセルボタンを表示するとします。フォームを使用する代わりに、メサージボックスを使用します。 例えば:あなたは&が親のフォームを変更したいことをやるために、フォームを使用しようとしている場合は

DialogResult dgResult = MessageBox.Show("Click Yes or No", "Test App", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); 
    if (DialogResult.OK == dgResult) 
    { 
     //Do what you want. 
    } 
    else 
    { 
     //Do nothing. 
    } 

、フォームAの変数を変更からフォームBを防ぐために、デリゲートを使用することをお勧めします。そうで

:(推奨しない)インスタンス化フォームB. )(B.ShowDialogを行う必要フォームA. のメンバ変数として

宣言フォームB;を 内部でOK &キャンセルdo this.dispose(); もう一度フォームBが必要なときにインスタンス化するだけです。再インスタンス化は非常に頻繁に呼び出さないとあまりオーバーヘッドにならないでしょう。

ただし、OKキャンセルのみが必要な場合は、代わりにメッセージボックスを使用してください。

1

表示/非表示のアプローチは、私の作品:

Public Class frmViewChild ' your form A 
Private WithEvents _edit As frmEdit 

'コード

Private Sub editCell() 
    Dim PKVal As String 
    Dim PKVal2 As String 
    Dim fieldOrdinalPos As Integer 
    Dim isLastField As Boolean 

    If _edit Is Nothing Then 
     _edit = New frmEdit 
     _edit.MdiParent = Me.MdiParent 
    End If 
    'code 
    _edit.init(<params>) 
    If Not _edit.isNothing Then 
     _edit.Show() 
     _edit.WindowState = FormWindowState.Maximized 
     _edit.BringToFront() 
    End If 
End Sub 

' コード

Private Sub _edit_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles _edit.VisibleChanged 
    If Not _edit.Visible Then 
     WindowState = FormWindowState.Maximized  ' revert after closing edit form 
    End If 
End Sub 

Public Class frmEdit  ' your form B 
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click 
    Dim ret As Integer 

    doOK(ret) 
    If ret > -1 Then ' no error 
     Me.Hide()  ' close form, but didn't cancel 
    End If 
End Sub 

HTH

関連する問題