電子書籍の厳選無料作品が豊富!

こんにちは。

VB.netを用いて簡単なプログラムを作っています。

メニュー画面を作っており、ボタンをFlatにして背景色は白にしています。
ログインするユーザーによって使うボタンを変更したいのですが、
Flatの特性なのか、Enable=falseであることがわかりにくいなと思い
ボタンの背景色をグレー等にできたらいいなと考えています。

プロパティなども確認しましたが、方法が分からず困っています。
もしご存知の方がいたらご教授願えませんでしょうか。

宜しくお願い致します。

A 回答 (1件)

Enabled = False となるタイミングで、BackColor を希望する色に変更してください。


もちろん、その逆もしかりです。


もしくは例えば下記のようなコードで、Enabledの状態に応じて色を勝手に変更してくれる専用のボタンを用意するかですね。
Imports System.ComponentModel

Public Class ButtonEx
Inherits Button

Private _enabledColor As Color = Color.Empty

''' <summary>
''' Enabled が False の時のコントロールのの背景色を取得または設定します。
''' </summary>
''' <returns>背景色を表す Color 値。</returns>
<Browsable(True)>
<Category("自作 表示")>
<Description("Enabled が False の時のコンポーネントの背景色です。")>
Public Property DisableBackColor As Color

''' <summary>
''' DisableBackColor が変更されたかどうか。
''' </summary>
''' <returns></returns>
Private Function ShouldSerializeDisableBackColor() As Boolean
If DisableBackColor = Color.Empty Then
Return False
End If

Return True
End Function

''' <summary>
''' DisableBackColor を既定値に戻す。
''' </summary>
Private Sub ResetDisableBackColor()
DisableBackColor = Color.Empty
End Sub

''' <summary>
''' コントロールの背景色を取得または設定します。
''' </summary>
''' <returns>背景色を表す Color 値。</returns>
Public Overloads Property BackColor As Color
Get
Return MyBase.BackColor
End Get
Set(value As Color)
If Enabled OrElse Not ShouldSerializeDisableBackColor() Then
MyBase.BackColor = value
End If

_enabledColor = value
End Set
End Property

''' <summary>
''' コントロールがユーザーとの対話に応答できるかどうかを示す値を取得または設定します。
''' </summary>
''' <returns>コントロールがユーザーとの対話に応答できる場合は true。それ以外の場合は false。既定値は、true です。</returns>
Public Overloads Property Enabled As Boolean
Get
Return MyBase.Enabled
End Get
Set(value As Boolean)
MyBase.Enabled = value
If value Then
MyBase.BackColor = _enabledColor
Return
End If

If ShouldSerializeDisableBackColor() Then
MyBase.BackColor = DisableBackColor
End If
End Set
End Property
End Class
    • good
    • 0
この回答へのお礼

naktak様
ご回答いただきありがとうございます。
やはり専用のボタンを作成する必要があるのですね。。

コントロールを自作することになれていないので
頂いたPGを参考に、作成しようと思います。

ご丁寧に対応頂きありがとうございました!

お礼日時:2024/07/03 10:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A