- PR -

vb.net ファームの最前面表示について

1
投票結果総投票数:7
Windows 7 100.00%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
はじめ
会議室デビュー日: 2008/01/03
投稿数: 2
投稿日時: 2008-01-03 10:36
開発言語 VB.NET
WINDOWSアプリケーション
画面(5画面)
・ログイン画面(OK、キャンセル)
・メイン画面(登録、閉じる)
・サブ画面A(設定、閉じる)
・サブ画面B(設定、閉じる)
・サブ画面C(設定、閉じる)
[画面仕様]
ログイン画面の「OK」ボタンでメイン画面が起動。「キャンセル」は、画面を閉じる。
メイン画面起動後、ログイン画面消去。
メイン画面からサブ画面A〜Cが各ボタンで起動されるのですが、サブ画面AとBの場合は、複数画面の起動が可能。
サブ画面Cを起動した場合、開いているAとBのサブ画面は消去する。
サブ画面Aを起動した場合、サブ画面Aを開く(同じサブ画面Aは複数オープン可。閉じるボタンで本画面を閉じる)
サブ画面Bを起動した場合、サブ画面Bを開く(同じサブ画面Bは複数オープン可。閉じるボタンで本画面を閉じる)
サブ画面Cを起動した場合、他に開かれているサブ画面(A,B,C)は、消去される。
サブ画面A、B、Cの画面をそれぞれ複数開いている場合、マウスでクリックした画面は、最前面に表示し、
アクティブにする。
ちなみにTopMost = Trueを試したのですが、最前面に表示できませんでした。
画面のオープンは、
dim main as New form1
main.show
で画面を開いています。



質問1)上記で、複数のサブ画面を開いている状態で、あるサブ画面をマウスでクリックした場合に最前面に表示したいのですが、最前面に表示されない。
質問2)上記で、サブ画面Cを起動した場合、開かれているAもしくは、Bのサブ画面は消去する。

上記、質問について教えてください。



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-01-03 13:21
引用:

はじめさんの書き込み (2008-01-03 10:36) より:

サブ画面A、B、Cの画面をそれぞれ複数開いている場合、マウスでクリックした画面は、最前面に表示し、アクティブにする。
ちなみにTopMost = Trueを試したのですが、最前面に表示できませんでした。

質問1)上記で、複数のサブ画面を開いている状態で、あるサブ画面をマウスでクリックした場合に最前面に表示したいのですが、最前面に表示されない。


実装箇所がわかりませんので、この部分の具体的なソースコードを提示して頂けないでしょうか?

普通に実装していれば問題ないと思いますが、いくつか気になる点として、

引用:

メイン画面起動後、ログイン画面消去
サブ画面Cを起動した場合、開いているAとBのサブ画面は消去する。
サブ画面Aを起動した場合、サブ画面Aを開く(同じサブ画面Aは複数オープン可。閉じるボタンで本画面を閉じる)
サブ画面Bを起動した場合、サブ画面Bを開く(同じサブ画面Bは複数オープン可。閉じるボタンで本画面を閉じる)
サブ画面Cを起動した場合、他に開かれているサブ画面(A,B,C)は、消去される。


"消去" という言葉が使われていたりしますが、非常に曖昧な表現です。 ここが気になる点です。 Close メソッドなのか Hide メソッドなのかでインスタンスの状態が変わります。 この点を明示してください。

引用:

質問2)上記で、サブ画面Cを起動した場合、開かれているAもしくは、Bのサブ画面は消去する。

dim main as New form1
main.show
で画面を開いています。


んー、VB (.NET Framework 2.0 以降) であれば簡単にできないことはないですが。 My.Forms で列挙して Close していくか、自分でインスタンスを管理するかですね。

# .NET Framework のバージョンも明示して頂く必要があります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
はじめ
会議室デビュー日: 2008/01/03
投稿数: 2
投稿日時: 2008-01-03 16:14
じゃんぬねっとさん、回答ありがとうございます。

ご指摘頂いた、消去については、Me.Closeです。
.NET Framework すいませんわかりません。
VISUAL STUDIO 2003
ProductVersion = "7.10.3077"
SchemaVersion = "2.0"


下記のような記述をしています。

Form1(ログイン画面)
Form2(メイン画面)
Form3(サブ画面A)
Form4(サブ画面B)
Form5(サブ画面C)

'ログイン画面
Public Class Form1
'OK
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim main画面 as new Form2
main画面.show
End Sub
End Class
'メイン画面
Public Class Form2
'サブ画面A
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sub画面A as new Form3
sub画面A.Owner = Me
sub画面A.show()
End Sub
'サブ画面B
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim sub画面B as new Form4
sub画面B.Owner = Me
sub画面B.show()
End Sub
'サブ画面C
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim sub画面C as new Form5
' すべての子フォームを削除
For Each hform As Form In Me.OwnedForms
hform.Close()
Next
sub画面C.Owner = Me
sub画面C.show()
End Sub
End Class
'サブ画面A,B,CはCLOSEで閉じる
Public Class Form3
'サブ画面A 閉じる
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.close()
End Sub
End Class
_________________
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2008-01-08 13:50
いや、だから、結局TopMost をどこにどう実装したのかが不明。

質問2)については、ご自身で実装されている
コード:
For Each hform As Form In Me.OwnedForms 
    hform.Close() 
Next 


を応用して、
コード:
For Each hform As Form In Me.OwnedForms 
    If TypeOf hform Is Form3 OrElse TypeOf hform Is Form4 Then
        hform.Close() 
    End If
Next 


とかで、実現できませんかね。

引用:

VISUAL STUDIO 2003


.NET Framework1.1 です。
1

スキルアップ/キャリアアップ(JOB@IT)