NumericUpDown.ValueChangedイベントはユーザーが値を直接変更した場合であっても、プログラムで変更された場合でも発生します。両者を区別する方法はないのでしょうか?

c# – 変更されたイベントがユーザー入力から発生したかどうかを確認します

上記サイトによると機械翻訳されたものなのかヘンテコな文章ですが、単純な方法で区別することはできないようです。代わりの方法としてNumericUpDownがActiveControlかどうかを調べる方法があります。

これだけだと幅と高さをアップダウンコントロールで変更することができるのですが、ダイアログが表示されたときにもとに戻ってしまいます。そこでダイアログがロードされたときの処理も変更しないといけません。

ShowImageString2()メソッドを作成した以上は以下のようにしてしまえばスッキリします(いったい何を面倒なことをしてたのだ?)。

それから問題はまだあります。フォントを変更したときや文字列を変更したときも幅と高さの設定がもとに戻ってしまいます。

まず色が変更されるときですが、これは ShowImageString()の代わりに ShowImageString2()を呼べば解決します。

問題は文字列の長さや角度、フォントの大きさが変更されるときです。このときはBitmapEx.GetBitmapRotateStringメソッドが返すBitmapのサイズと実際に表示されるBitmapのサイズの比を調べて適切な値をnumericUpDownWidthとnumericUpDownHeightに設定するというのはどうでしょうか?

ShowImageString2()が呼び出されたときにBitmapのサイズの比を調べて、ShowImageString()が呼び出されたらその比で新しいBitmapを生成します。