|  | 2019/08/28(Wed) 14:48:11 編集(投稿者) 
 ■No92122 (PANG2 さん) に返信
 >>たとえば、こういうパターンの場合に失敗するかも。
 > No.92119
 > で解決されているのですか?
 
 エラーになるか、成功するか、失敗するか、という質問でしょうか?
 そちらの環境での実験結果はどうでしたか?
 
 No92119 の
 Public Sub CopySettings(template As NumericUpDown)
 Dim target As NumericUpDown
 target = Me.NumericUpDown1
 の部分を
 Public Sub CopySettings(target As NumericUpDown, template As NumericUpDown)
 な実装に差し替えて、それを
 
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 NumericUpDown1.Hexadecimal = False
 NumericUpDown1.DecimalPlaces = 0
 NumericUpDown1.Maximum = Decimal.MaxValue
 NumericUpDown1.Minimum = Decimal.MinValue
 NumericUpDown1.Value = NumericUpDown1.Maximum
 
 NumericUpDown2.Hexadecimal = True
 NumericUpDown2.DecimalPlaces = 0
 NumericUpDown2.Maximum = Integer.MaxValue
 NumericUpDown2.Minimum = Integer.MinValue
 NumericUpDown2.Value = NumericUpDown2.Maximum
 
 CopySettings(NumericUpDown2, NumericUpDown1)
 End Sub
 
 として呼んだ場合、例外を発することなく複製されるという点までは確認しました。
 
 しかし、もしも CopySettings の実装を
 
 Public Sub CopySettings(target As NumericUpDown, template As NumericUpDown)
 'DirectCast(target, ISupportInitialize).BeginInit()
 With target
 .Hexadecimal = template.Hexadecimal
 .Increment = template.Increment
 .Maximum = template.Maximum
 .Minimum = template.Minimum
 .ThousandsSeparator = template.ThousandsSeparator
 .Value = template.Value
 End With
 'DirectCast(target, ISupportInitialize).EndInit()
 End Sub
 
 とした場合には、Hexadecimal の転送時点で OverflowException がスローされることになりました。
 
 ISupportInitialize を有効にしていた場合は例外は発生しませんでしたが、
 ISupportInitialize 無しで設定しようとするならば、依存関係にある
 プロパティの内容を考慮しながら値を設定していく必要がありそうです。
 
 
 その点が、 No92115 で触れた
 >> ※ ISupportInitialize.BeginEdit & .EndEdit で挟むとなお良し。
 や、 No92119 でも触れた
 >> どのプロパティとどのプロパティを、どの順番で複製するか
 という点に繋がってきます。
 
 特にコントロールの場合、ValueChagned 等のイベントを設定して
 いることがあるかと思いますが、設定コピー時に、そうしたイベントが
 呼ばれて欲しいケースもあれば、呼ばれて欲しくないケースもあるでしょう。
 あるいは、設定のコピー中はイベントが発生しないようにして、すべての
 コピーが完了した後で呼び出される方が都合が良いかもしれません。
 
 また、データバインド設定が影響してくる可能性もあるでしょう。
 
 こうした点は、それぞれのアプリの実装状況によっても
 変わってくるかと思いますので、汎用的なコピー実装を設ける場合、
 そうした点も気に掛ける必要があるかもしれません。
 
 |