2012-01-24 12 views
0

VB Windowsフォームアプリケーション..プログラムの一部に設定項目があり、ユーザーが設定項目を入力できるアプリケーションを開発しています。メインフォーム上で設定メニューのメニューバー項目をクリックすると、メニューが開きます。これは問題ありませんが、設定メニューが閉じられるまでメインフォームは再びアクティブにならないはずです。これは現時点では起こりません。メインフォームは単にフォアグラウンドになり、設定フォームはバックグラウンドになります。これを処理するために、子フォームでイベントをコーディングすると、子ウィンドウがコントロールを失い、メインフォームのゲインコントロール..私は、メインフォーム上で次のように関数をコーディングすると思ったが、それはすべてのフォームのために追加する必要があり、それを閉じる前に、子供が実際に開いていることを確認する必要があるため、 。親ウィンドウがフォーカスを取得すると、自動的にウィンドウが閉じます

Private Sub Form1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus 
    MailSettingsWindow.Close() 
    RentalSettingsWindow.Close() 

End Sub 

私は上記のサブ・ルーチンを離れなかったし、私が探していただけのように動作にShowDialogを使用してのrecomendationごとに以下のコードを使用していました。

Private Sub MailingAndEmailSettingsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MailingAndEmailSettingsToolStripMenuItem.Click 
    Dim MailConfig As New MailSettingsWindow() 
    MailSettingsWindow.Showdialog() 
End Sub 
+0

フォーカスを変更する**非破壊**アクションでなければなりません。 Windowsはマルチタスキングオペレーティングシステムであり、ユーザーはマルチタスクを実行できることを期待しています。 *あなたのアプリケーションが違った動作*をしていると、あなたのパターンが「より良い」か「革新的」であっても、混乱し、混乱し、恐らくあなたを責めるでしょう。ユーザーは、画面上の情報や物事を無断で閉じることなく、アプリ内の別のウィンドウにフォーカスを合わせることができるはずです。特にウィンドウを閉じない限り、ウィンドウを閉じないでください。 –

+0

理解できる..しかし、ユーザーがアプリケーションの設定ウィンドウに入ると、そのウィンドウを開いたままにすることはできず、変更を加えて保存したり、単に閉じるボタンをクリックするか、キャンセルするまでアプリケーションを使用できるはずですボタン。 – Skindeep2366

+0

ですから、設定のウィンドウが閉じるまで、親フォームをブロックする必要がありますか? – Jaxedin

答えて

2

私は上記のサブ・ルーチンを離れなかったし、私が探していただけのように動作ShowDialogを使用しての推奨されているように以下のコードを使用していました。次のように

私のコードは次のとおりです。

Private Sub MailingAndEmailSettingsMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles MailingAndEmailSettingsMenuItem.Click 
    Dim MailConfig As New MailSettingsWindow() 
    MailSettingsWindow.ShowDialog() 
End Sub 
関連する問題