■50406 / inTopicNo.4) |
Re[3]: FolderBrowserDialogフォームの中央に表示 |
□投稿者/ やじゅ (1632回)-(2010/06/06(Sun) 18:29:13)
|
■No50405 (なちゃ さん) に返信
> FolderBrowserDialogはsealedなので継承してカスタマイズは出来ないですよ。
ああ、NotInheritable(sealed)で継承できないですね、見逃してました。
下記サイトを参考にVB.NETに書き換えてみました。
http://rararahp.cool.ne.jp/cgi-bin/lng/dotnet/dotnetlng.cgi?print+200609/06090001.txt
Imports System.Threading
Imports System.Runtime.InteropServices
Public Class Win32API
<StructLayout(LayoutKind.Sequential)> _
Public Structure RECT
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
<DllImport( _
"user32.dll", _
CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Public Shared Function FindWindow( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
End Function
<DllImport("user32.dll")> _
Public Shared Function SetWindowPos(ByVal hWnd As IntPtr, _
ByVal hWndInsertAfter As IntPtr, ByVal x As Integer, ByVal y As Integer, _
ByVal width As Integer, ByVal height As Integer, _
ByVal flags As Integer) As UInt32
End Function
<DllImport("user32.dll")> _
Public Shared Function GetWindowRect(ByVal hwnd As IntPtr, _
ByRef lpRect As RECT) As Integer
End Function
Public Const SWP_NOSIZE As Integer = 1
End Class
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim threadA As New Thread(New ThreadStart(AddressOf ThreadMethod))
threadA.Start()
'FolderBrowserDialogクラスのインスタンスを作成
Dim fbd As New FolderBrowserDialog
'上部に表示する説明テキストを指定する
fbd.Description = "フォルダを指定してください。"
'ルートフォルダを指定する
'デフォルトでDesktop
fbd.RootFolder = Environment.SpecialFolder.Desktop
'最初に選択するフォルダを指定する
'RootFolder以下にあるフォルダである必要がある
fbd.SelectedPath = "C:\Windows"
'ユーザーが新しいフォルダを作成できるようにする
'デフォルトでTrue
fbd.ShowNewFolderButton = True
'ダイアログを表示する
If fbd.ShowDialog(Me) = DialogResult.OK Then
'選択されたフォルダを表示する
Console.WriteLine(fbd.SelectedPath)
End If
End Sub
Private Sub ThreadMethod()
Dim hWnd As IntPtr
Dim winRect As Win32API.RECT
Dim pt As System.Drawing.Point
Do
hWnd = Win32API.FindWindow(Nothing, "フォルダの参照")
Loop While (hWnd = IntPtr.Zero)
'フォルダ参照ダイアログのサイズを取得
Win32API.GetWindowRect(hWnd, winRect)
pt = New Point(Me.Location.X + (Me.Width - (winRect.right - winRect.left)) \ 2, _
Me.Location.Y + (Me.Height - (winRect.bottom - winRect.top)) \ 2)
'フォルダ参照ダイアログの位置をオーナーフォームの中央にする
Win32API.SetWindowPos(hWnd, IntPtr.Zero, pt.X, pt.Y, 0, 0, Win32API.SWP_NOSIZE)
End Sub
End Class
|
|