VB.NETでコマンドリンクを使いたい
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2018/9/5 18:54:46
※この掲示板の IMAGE タグは https だと反応しません。http のみ。
ひとまず最低限の実装なら、BS_COMMANDLINK スタイルを指定すれば OK です。
これだけだと寂しいので、BCM_SETNOTE や BCM_SETSHIELD もあると良いでしょう。
ひとまず最低限の実装なら、BS_COMMANDLINK スタイルを指定すれば OK です。
Imports System.ComponentModel
Imports System.Runtime.InteropServices
<ToolboxBitmap(GetType(Button))>
<DefaultEvent("Click")>
Public Class CommandLink
Inherits Button
Public Sub New()
End Sub
Protected Overrides ReadOnly Property CreateParams As CreateParams
Get
Const BS_COMMANDLINK As Integer = &HE
Dim p = MyBase.CreateParams
p.Style = p.Style Or BS_COMMANDLINK
Return p
End Get
End Property
End Class
これだけだと寂しいので、BCM_SETNOTE や BCM_SETSHIELD もあると良いでしょう。
#Region "SupplementalExplanation / 補足テキスト"
''' <summary>
''' 補足テキスト
''' </summary>
''' <returns></returns>
<Category("Appearance")>
<Description("補足テキスト")>
<DefaultValue("")>
Public Property SupplementalExplanation As String
Get
Return _SupplementalExplanation
End Get
Set(value As String)
Const BCM_SETNOTE As Integer = 5641
_SupplementalExplanation = value
SendMessage(New HandleRef(Me, Me.Handle), BCM_SETNOTE, IntPtr.Zero, value)
End Set
End Property
Private _SupplementalExplanation As String = ""
#End Region
#Region "UACShield / UAC シールドアイコン"
''' <summary>
''' UAC シールドアイコン
''' </summary>
''' <returns></returns>
<Category("Appearance")>
<Description("UAC シールドアイコン")>
<DefaultValue(False)>
Public Property UACShield As Boolean
Get
Return _UACShield
End Get
Set(value As Boolean)
Const BCM_SETSHIELD As Integer = 5644
_UACShield = value
SendMessage(New HandleRef(Me, Me.Handle), BCM_SETSHIELD, IntPtr.Zero, New IntPtr(If(value, 1, 0)))
End Set
End Property
Private _UACShield As Boolean = False
#End Region
Private Declare Auto Function SendMessage Lib "user32" (hwnd As HandleRef, msg As Integer, wParam As IntPtr, lParam As IntPtr) As IntPtr
Private Declare Auto Function SendMessage Lib "user32" (hwnd As HandleRef, msg As Integer, wParam As IntPtr, lParam As String) As IntPtr
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2018/9/6 09:50:38
先のコードですが、下記のように訂正しておいてください。
FlatStyle が System でないと CommandLink のスタイルになりませんので。
> 自作する以外に方法はないのでしょうか。
Microsoft が公開していた WindowsAPICodePack にも含まれています。
https://blogs.msdn.microsoft.com/ttanaka/2010/10/24/windows-api-code-pack-17-windows-7-12/
今回のケースで言うと、
Microsoft.WindowsAPICodePack.Shell.dll
Microsoft.WindowsAPICodePack.dll
を参照設定してやれば、CommandLink クラスを利用可能です。
※WinForm 用が Microsoft.WindowsAPICodePack.Controls.WindowsForms 名前空間
※WPF 用が Microsoft.WindowsAPICodePack.Controls.WindowsPresentationFoundation 名前空間
しかし WindowsAPICodePack の公式配布サイトは、残念ながら既に閉鎖しています。
当時のアーカイブキャッシュがこちら。
https://web.archive.org/web/20130110103706/http://archive.msdn.microsoft.com:80/WindowsAPICodePack
Microsoft からの公式なダウンロードサイトは既に失われていますが、
その後、有志によって改修・再公開されたものが幾つかありますので
そちらを使ってみるのも良いかもしれません。
Visual Studio メニューの [ツール]-[NuGet パッケージマネージャ] から
『WindowsAPICodePack Shell』というキーワードで検索して導入してみてください。
具体的なパッケージ例としては
Microsoft-WindowsAPICodePack-Shell
https://www.nuget.org/packages/Microsoft-WindowsAPICodePack-Shell/
などがあります。
FlatStyle が System でないと CommandLink のスタイルになりませんので。
Public Sub New()
FlatStyle = FlatStyle.System '★この行を追加
End Sub
> 自作する以外に方法はないのでしょうか。
Microsoft が公開していた WindowsAPICodePack にも含まれています。
https://blogs.msdn.microsoft.com/ttanaka/2010/10/24/windows-api-code-pack-17-windows-7-12/
今回のケースで言うと、
Microsoft.WindowsAPICodePack.Shell.dll
Microsoft.WindowsAPICodePack.dll
を参照設定してやれば、CommandLink クラスを利用可能です。
※WinForm 用が Microsoft.WindowsAPICodePack.Controls.WindowsForms 名前空間
※WPF 用が Microsoft.WindowsAPICodePack.Controls.WindowsPresentationFoundation 名前空間
しかし WindowsAPICodePack の公式配布サイトは、残念ながら既に閉鎖しています。
当時のアーカイブキャッシュがこちら。
https://web.archive.org/web/20130110103706/http://archive.msdn.microsoft.com:80/WindowsAPICodePack
Microsoft からの公式なダウンロードサイトは既に失われていますが、
その後、有志によって改修・再公開されたものが幾つかありますので
そちらを使ってみるのも良いかもしれません。
Visual Studio メニューの [ツール]-[NuGet パッケージマネージャ] から
『WindowsAPICodePack Shell』というキーワードで検索して導入してみてください。
具体的なパッケージ例としては
Microsoft-WindowsAPICodePack-Shell
https://www.nuget.org/packages/Microsoft-WindowsAPICodePack-Shell/
などがあります。
投稿者 ssskkk  (学生)
投稿日時
2018/9/6 10:00:25
魔界の仮面弁士 様ありがとうございます。
なんとか完成させることができました。
なんとか完成させることができました。
環境:
Windows10
VisualStudio 2017
VB.NETでファイルを管理するアプリケーションを作っています
ファイル削除の確認をするときにコマンドリンクを使ったダイアログを使用したいのですが
ネットで調べても出てきませんでした。
自作する以外に方法はないのでしょうか。