前提・実現したいこと
Formを 普段は半透明で マウスカーソルをForm上に持って行った時だけ不透明にしたいです。
何か方法はないでしょうか?
試したこと_1
Formにイベント追加
- MouseEnter イベント で Form を 不透明 化
- MouseLeave イベント で Form を 半透明 化
発生問題_1
Form内の他のコントロール上にカーソルが移動したとき等
半透明になってしまう。
試したこと_2
- リストForm内の全てのコントロールにForm同様のイベントを追加
発生問題_2 ← 現在
Formのタイトルバー上にカーソルが移動したときに
半透明になってしまう。
サンプルコード
powershell
1using namespace System.Windows.Forms 2using namespace System.Drawing 3 4 5$_Get_Form = { 6 #フォームの作成 7 $FormWed = 600 8 $FormlHei = 300 9 $Form = [Form]::new() 10 $Form.Size = [Size]::new($FormWed, $FormlHei) 11 $Form.Text = "Test" 12 13 #データグリッドビューの作成 14 $ListCount = 2 15 $Script:List = 1..$ListCount | foreach { [DataGridView]::new() } 16 $ListName = @('test1', 'test2') 17 for ($i = 0; $i -lt $ListCount; $i++) 18 { 19 $List[$i].AutoSizeColumnsMode = [DataGridViewAutoSizeColumnsMode]::AllCells 20 $List[$i].AutoSizeRowsMode = [DataGridViewAutoSizeRowsMode]::AllCells 21 $List[$i].Name = "List_$($ListName[$i])" 22 $List[$i].Dock = [DockStyle]::Fill 23 } 24 $List[0].Add_SelectionChanged($_ListNowUp) 25 $List[0].MultiSelect = $false 26 #$List[1].Columns[0].DefaultCellStyle.WrapMode = [DataGridViewTriState]::True 27 28 $SplitContainer = [SplitContainer]::new() 29 $SplitContainer.Panel1.Controls.Add($List[0]) 30 $SplitContainer.Panel2.Controls.Add($List[1]) 31 $SplitContainer.Name = "SplitContainer_1" 32 $Form.Controls.Add($SplitContainer) 33 34 35 36 $Form.Add_Activated({ 37 $Form.TopMost = $True 38 }) 39} 40 41$_Form_Semitransparent = { 42 $_Fm= $Form 43 $_Fm.Opacity = 0.1 44} 45 46$_Form_Opacity = { 47 $_Fm= $Form 48 $_Fm.Opacity = 1 49} 50 51$_AllControls = { 52 53 param([Control]$Control) 54 55 $Control.Controls | foreach { 56 $($_AllControls.Invoke($_)) 57 } 58 $Control 59} 60 61.$_Get_Form 62$($_AllControls.Invoke($Form)) | foreach { 63 $_."Add_MouseEnter"($_Form_Opacity) 64 $_."Add_MouseLeave"($_Form_Semitransparent) 65} 66 67$Form.ShowDialog() 68 69
補足情報
Win10
- From は System.Windows.Forms.Form の オブジェクト です
- Form中のControlにはNestされているものもあります。
回答1件
あなたの回答
tips
プレビュー