.NETで色々なコントロールをReadOnlyにしたいときどうすれば。

.NETの標準コントロール群は、ReadOnlyプロパティがTextBoxBaseにしかなく、全コントロールにあるEnabledは前景色/背景色が強制的に変わってしまう。なんという残念なAPI設計。


いろいろ調べてあれこれ考えて、方針をまとめたのでメモ。

  1. コントロールは継承せず、標準コントロールを使う。
  2. TextBoxBase系はReadOnlyプロパティで制御する。
  3. 上記以外はWndProcでメッセージを補足して、ReadOnlyにする時はフォーカス禁止・キー入力禁止・マウスクリック禁止とする。
  4. コントロールのReadOnlyは専用のコンテナで制御する。


これでテキストボックスはコピーができる。
年末に実装を書いてみる。