質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

631閲覧

アプリケーションを「.test」という拡張子に関連付けてファイルをダブルクリックして起動したときに親ウィンドウは背面で、ファイルがあるディレクトリは中間で子ウィンドウを一番前面にしたい

tada_tadaa

総合スコア111

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2023/01/13 03:30

編集2023/01/13 04:59

前提

VB.NETで作ってるアプリケーションを「.test」という拡張子に関連付けてファイルをダブルクリックしてアプリケーションを起動したときにアプリケーションの子ウィンドウにはダブルクリックしたファイルの内容がアプリケーションの子ウィンドウに表示される。

実現したいこと

「.test」という拡張子のファイルをダブルクリックしてアプリケーションを起動したときにアプリケーションの子ウィンドウにはダブルクリックしたファイルの内容がアプリケーションの子ウィンドウに表示されるが、その時に親ウィンドウは背面に、ファイルがあるディレクトリは中間で、ファイルの内容を表示する子ウィンドウは一番前面に表示したい。

発生している問題・エラーメッセージ

子ウィンドウのTopMostプロパティにTrueを設定すると一番前面に表示されるが、常に前面に表示されてて他のウィンドウの後ろに隠す事ができなくなる。
希望としてはマウス等で操作したときに、他のウィンドウの後ろに隠れるようにしたいので、TopMostをTrueにした直後にTopMostにFalseを設定したが、「.test」という拡張子のファイルをダブルクリックして子ウィンドウの内容を変更したときに、親ウィンドウが前面に出て子ウィンドウが親ウィンドウの背面に隠れる。

TopMostは使わずに子ウィンドウのBringToFront()を呼び出してみたが、子ウィンドウが背面で親ウィンドウが前面になってしまう。

該当のソースコード

vb.net

1'ファイルApplicationEvents.vbのソース 2Imports System 3Imports System.IO 4Imports System.Text 5 6Namespace My 7 Partial Friend Class MyApplication 8 9 Private Sub MyApplication_StartupNextInstance(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance 10 11 Dim FilePath As String = e.CommandLine(0) 12 Dim sr As New StreamReader(FilePath, Encoding.UTF8) 13 Dim text As String = sr.ReadToEnd() 14 15 Form1.f2.Label1.Text = text 16 Form1.f2.Show() 17 Form1.f2.BringToFront() 18 'Form1.f2.TopMost = True 19 'Form1.f2.TopMost = False 20 21 End Sub 22 23 End Class 24End Namespace

vb.net

1'ファイルForm1.vbのソース 2Public Class Form1 3 Public f2 As New Form2() 4 5 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 6 f2.Show() 7 End Sub 8End Class

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

使っているPCのOS  Windows10
使っているIDE Microsoft Visual Studio Community 2019
ターゲットフレームワーク .NET Framework 4.7.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pig_vba

2023/01/13 04:13

逆に、子ウィンドウを呼び出したあとに親ウィンドウをsend_to_backするというのはどうでしょうか?
退会済みユーザー

退会済みユーザー

2023/01/13 04:44

「VB.NETで作ってるアプリケーション」って何? 何を何で作っているかを質問欄を編集して追記してください。(例: Windows 10 の Visual Studio 2022 で Windows Forms アプリをターゲットフレームワーク .NET Framework 4.8 で作っています・・・とか) ターゲットフレームワークというのは、Visual Studio のソリューションエクスプローラーでプロジェクト名を右クリックして出てくるメニューでプロパティを選んで表示すると「対象のフレームワーク (またはターゲットフレームワーク)」という項目があるので、それを見てください。
guest

回答1

0

自己解決

vb.net

1 Private Sub MyApplication_StartupNextInstance(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance 2 Dim FilePath As String = e.CommandLine(0) 3 Dim sr As New StreamReader(FilePath, Encoding.UTF8) 4 Dim text As String = sr.ReadToEnd() 5 6 Form1.f2.Label1.Text = text 7 8 Form1.f2.TopMost = True 9 Form1.f2.Show() 10 Form1.f2.TopMost = False 11 Form1.SendToBack() 12 Form1.SendToBack() 13 End Sub

MyApplication_StartupNextInstanceプロシージャを上記のように変更することでうまい具合に子ウィンドウが前面に、親ウィンドウが背面に、ファイルが置いてあるディレクトリのエクスプローラーは中間にすることができました。

Form1.SendToBack()が1個だと、親ウィンドウが前面に表示されてしまうので2個にしました。
ありがとうございました。

投稿2023/01/13 05:08

tada_tadaa

総合スコア111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問