.NETで色々なコントロールをReadOnlyにしたいときどうすれば。
.NETの標準コントロール群は、ReadOnlyプロパティがTextBoxBaseにしかなく、全コントロールにあるEnabledは前景色/背景色が強制的に変わってしまう。なんという残念なAPI設計。
いろいろ調べてあれこれ考えて、方針をまとめたのでメモ。
- コントロールは継承せず、標準コントロールを使う。
- TextBoxBase系はReadOnlyプロパティで制御する。
- 上記以外はWndProcでメッセージを補足して、ReadOnlyにする時はフォーカス禁止・キー入力禁止・マウスクリック禁止とする。
- コントロールのReadOnlyは専用のコンテナで制御する。
これでテキストボックスはコピーができる。
年末に実装を書いてみる。