たった今疑問が生じました。。。 Public Property IconFileCollection As List(Of String) を Public ReadOnly Property IconFileCollection As List(Of String) …としたとして、別のIconFileCollectionにコレクションを入力するプロパティを作ったとして、 またそのプロパティに同じエラーが発生しないものでしょうか… あ、メソッドで作ってしまえば良いんでしょうかね… デザイン時のプロパティで設定出来るのが望ましいですが、 私の知識が追いつかない為、最悪はメソッドで作ってメソッドでファイル名リストコレクションを渡す事にします。。。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ''' <summary> ''' デフォルトのアイコンを使用する時にTrueにします。 ''' </summary> ''' <returns></returns> <Category("設定"), Bindable(True), Description("デフォルトのアイコンを使用する時にTrueにします。")> Public Property DefaultIconUse As Boolean Get Return _DefalutIconUse End Get Set(value As Boolean) DefalutIconUse = value If _DefalutIconUse Then Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() Dim rm As New System.Resources.ResourceManager(asm.GetName().Name + ".Resources", asm) Dim bmp As Bitmap = Nothing
_IconFileCollection.Clear() For x As Integer = 1 To StateCount bmp = CType(rm.GetObject(x), Bitmap) Me._IconCollection.Add(bmp) Next Else _IconCollection.Clear() PictureBox1.Image = Nothing End If End Set End Property -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> プロパティ値の保存を行うかどうかを制御したい場合には、 > Private Function ShouldSerializeIconFileCollection() As Boolean > Return Not DefaultIconUse > End Function > Private Sub ResetIconFileCollection() > '_IconCollection と _IconFileCollection のリセット処理 > End Sub > というメソッドを用意しておけば OK です。詳細は下記参照。 > https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/defining-default-values-with-the-shouldserialize-and-reset-methods?WT.mc_id=DT-MVP-8907&view=netframeworkdesktop-4.8
プロパティ値の保存を行うかどうかを制御したい場合には、 Private Function ShouldSerializeIconFileCollection() As Boolean Return Not DefaultIconUse End Function Private Sub ResetIconFileCollection() '_IconCollection と _IconFileCollection のリセット処理 End Sub というメソッドを用意しておけば OK です。詳細は下記参照。 https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/defining-default-values-with-the-shouldserialize-and-reset-methods?WT.mc_id=DT-MVP-8907&view=netframeworkdesktop-4.8
>>Set(value As List(Of String)) >> If value Is Nothing Then Exit Property >> DefaultIconUse = False >> If value.Count > StateCount Then >> Throw New Exception("状態アイコンは" & StateCount & "個です") >> Exit Property >> End If > > Throw の後の Exit Property って意味がないような。
やっぱりそうなのですね(;^_^A そうじゃないかなとも思ったのですが、自信が無かったもので^^;
> 素の Exception が使われると、後で対処しにくくなるので、自分なら、 > If value Is Nothing Then > Throw new ArgumentNullException(NameOf(IconFileCollection)) > ElseIf value.Count > StateCount Then > Throw New ArgumentOutOfRangeException(NameOf(IconFileCollection), "状態アイコンは" & StateCount & "個以下でなければなりません")) > End If > のようにするかな。
> Set(value As List(Of String)) > If value Is Nothing Then Exit Property > DefaultIconUse = False > If value.Count > StateCount Then > Throw New Exception("状態アイコンは" & StateCount & "個です") > Exit Property > End If
Throw の後の Exit Property って意味がないような。
素の Exception が使われると、後で対処しにくくなるので、自分なら、 If value Is Nothing Then Throw new ArgumentNullException(NameOf(IconFileCollection)) ElseIf value.Count > StateCount Then Throw New ArgumentOutOfRangeException(NameOf(IconFileCollection), "状態アイコンは" & StateCount & "個以下でなければなりません")) End If のようにするかな。
<関連しているユーザーフォームのプロパティ> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ''' <summary> ''' 状態表示に使用する状態ファイル名リスト。 ''' </summary> ''' <returns>各状態のファイル名リスト</returns> <Category("設定"), Bindable(False), Description("状態表示のアイコンファイル名リスト。")> Public Property IconFileCollection As List(Of String) Get Return _IconFileCollection End Get Set(value As List(Of String)) If value Is Nothing Then Exit Property
DefaultIconUse = False If value.Count > StateCount Then Throw New Exception("状態アイコンは" & StateCount & "個です") Exit Property End If _IconFileCollection = value For x As Integer = 1 To _IconFileCollection.Count - 1 _IconCollection(x - 1) = Image.FromFile(_IconFileCollection(x - 1)) Next Status = Status PictureBox1.Invalidate() End Set End Property -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
=> Set(value As List(Of String))直下に「If value Is Nothing Then Exit Property」を入れてみたのですが、変わりませんでした。
<ユーザーアイコン EK-Icon概要> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ・プライベートフィールド _IconCollectionにイメージリストを持っており、パブリックプロパティ「Statsu」に番号を指定すると指定されたイメージを表示する。 ・パブリックプロパティ DefaultIconUse As BooleanプロパティにTrueを設定するとデフォルトで設定されているイメージになる。(_IconCollectionにデフォルトアイコンを読み込む) ・パブリックプロパティ IconFileCollection As List(Of String)にファイル名を設定すると該当ファイルのイメージを_IconCollectionに読み込む。(上記ソース参照) ・DefaultIconUseとIconFileCollectionは排他処理。 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------