プログラム起動中周りを灰色に・・(例・・ユーザーアカウント制御などのように) への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 葉月  (社会人) 投稿日時 2010/5/9 15:48:38
私が作るのは、趣味の小規模ツールが多いので、Tagを使う機会はありそう
です。
ただ、他人と作る場合やコードが長くなった場合は、流れが読みにくい印
象を受けました。
投稿者 るきお  (社会人) 投稿日時 2010/5/9 00:37:19
意味的にはあまりTagプロパティに入れないほうがいいんだと思いますが、
質問者のppoさんが小学生ということと、プログラムにまだあまりなじまれていない雰囲気だったので、
「Form用に変数を1つ用意する」という前提を省いて負担を軽くするために使いました。

と言いつつ、私はTagプロパティが結構好きでちょこちょこ使ってます。
投稿者 葉月  (社会人) 投稿日時 2010/5/8 21:55:42
こんばんは。

Formを新規に作る必要がなかったんですね。
Me.TagにDispose予定の透過されたFormを格納しておき、
必要がなくなったらTagを参考に掃除する部分が勉強になりました。
汎用性があり、とても参考になります。
ありがとうございました。
投稿者 るきお  (社会人) 投稿日時 2010/5/8 19:51:27
こんにちは。
Opacityを使うアイディアいいですね!

このアイディアを使って、もうちょっと使いやすく改造してみました。

Form1だけでOKで、別途Formを用意する必要はありません。
このプログラムを新規プログラムに貼り付けてもそのまま使えます。

ただし、モードを切り替えるためにButton1とButton2の2つのボタンは配置されている前提です。

    
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        '一人モード 
        MeAloneOn()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button2.Click
        '通常モード 
        MeAloneOff()
    End Sub


    ''' <summary> 
    ''' 自分のフォーム以外を黒くして触れなくする。 
    ''' この状態を解除するにはMeAloneOffを呼び出す。 
    ''' </summary> 
    Private Sub MeAloneOn()

        Dim backForm As New Form

        ' フォームを黒で半透明に。 
        backForm.BackColor = Color.Black
        backForm.Opacity = 0.83
        ' タイトルバー消す。  
        backForm.FormBorderStyle = FormBorderStyle.None
        ' フォーム最大化  
        backForm.WindowState = FormWindowState.Maximized

        Me.Tag = backForm
        backForm.Show()
        Me.TopMost = True
       
    End Sub

    ''' <summary>通常モードに戻す</summary> 
    Private Sub MeAloneOff()

        Dim backForm As Form

        backForm = CType(Me.Tag, Form)
        backForm.Close()
        backForm.Dispose()
        Me.Tag = Nothing
        Me.TopMost = False

    End Sub
投稿者 ppo  (小学生) 投稿日時 2010/5/8 14:03:11
わかりやすい説明ありがとうございました
参考になりました
投稿者 葉月  (社会人) 投稿日時 2010/5/8 11:18:13
初めまして。
Form1を背景として利用し、
Form2に主処理を行わせます。
動きは、サンプルのコメントを参考にしてください。
Form1の色は、デザイン画面のBackColorプロパティを変更します。


サンプルを載せますので、以下のことを行ってください。
・Timer1個を貼り付け
・Form2の作成

>>>サンプル
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        ' フォーム半透明 
        Me.Opacity = 0.83
        ' タイトルバー消す。 
        Me.FormBorderStyle = FormBorderStyle.None
        ' フォーム最大化 
        Me.WindowState = FormWindowState.Maximized

        Using f2 As Form = New Form2()
            f2.ShowDialog(Me)
        End Using

        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Timer1.Tick
        Me.Close()
    End Sub
End Class
投稿者 ppo  (小学生) 投稿日時 2010/5/8 07:55:58
ユーザーアカウント制御のように、プログラム起動中にプログラム以外の画面を灰色にしたいです。
どうか方法を教えてください