カラーピッカーを追加してパレットの色を変更できるようにした。
別のWindowとMainWindowとの連携する場合にOwnerの指定するタイミングを間違えてめんどくさいことになったはなし
パレットを使った減色で誤差拡散 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15432449.html
これに
カラーピッカーのdll(ライブラリ)作った、WPFユーザーコントロール ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15447603.html
これを追加して
パレットの色を変更できるようにした
色を選んでSetボタンを押すとパレットの色が変更される
元の画像
4色減色
茶色より赤がほしい
赤が入った
RGBの3色だと
RGB+白黒の5色
白黒が入ると全然違うなあ
YCMの3色
YCM+白黒の5色
RGB+白黒にそっくり、こうなるんだなあ
RGBYCMの6色
白黒なくても頑張っているけど
やっぱり白黒は重要だねえ
白黒
カラーピッカーはプロジェクトにWindowを追加したところに作った
こうして追加したWindowに名前は
Window1ColorPickerにした
ColorPickerコントロールとSetとCancelボタンの2つを追加した。
これをMainWindowのパレットの色を左クリックイベントで表示するようにしたいから、準備として
アプリ起動時に
アプリ起動完了時(Loaded)に
パレットの色をクリックでカラーピッカー表示
138行目、Showメソッドで表示
Window1ColorPicker(カラーピッカーWindow)
36行目、Setボタンのクリック時にMainWindowに色を送っている
ここで自身(this)のオーナー(MainWindow)を取得して、中のSetColorメソッドを使って色を送っている(37行目)
このためにオーナー指定が必要だった
その他はキャンセルボタンとウィンドウの閉じるボタンが押されたときは、実際には閉じないで非表示にする処理
ここまでの失敗例、難しかったところは
ColorPickerWindowのOwnerにMainWindow指定するタイミング
80行目、カラーピッカーWindowのオーナーにMainWindowを指定
たぶんアプリの起動中ってことはMainWindowも作っている最中で
まだ存在していないから存在していないものを指定することはできない
ってことなのかも
それならカラーピッカーWindowを開く直前ならどうかなと
138行目、カラーピッカーWindowを開く直前に指定した場合
タスクマネージャーでも確認できる
アプリを終了すると
けど詳細タブを見ると
なので起動と終了を繰り返すと
見た目は終了しているのに
起動回数分増えて無駄にメモリを消費するし
実行中だから新たにビルドもできなくなって
それでこの状態に気づいた
これを終了させるにはここで項目を右クリックメニューからタスクの終了で
システムが不安定になる可能性とか言われているけど
起動しているから不安定になっているんだよなあ
自分のせいなんだけど…
ビルドエラーの例
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー ファイル "obj\Release\20180410_減色パレットとカラーピッカー.exe" を "bin\Release\20180410_減色パレットとカラーピッカー.exe" にコピーできません。別のプロセスで使用されているため、プロセスはファイル 'bin\Release\20180410_減色パレットとカラーピッカー.exe' にアクセスできません。 20180410_減色パレットとカラーピッカー
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー "obj\Release\20180410_減色パレットとカラーピッカー.exe" を "bin\Release\20180410_減色パレットとカラーピッカー.exe" にコピーできませんでした。10 回の再試行回数を超えたため、失敗しました。このファイルは "20180410_減色パレットとカラーピッカー (6252), 20180410_減色パレットとカラーピッカー (7644), 20180410_減色パレットとカラーピッカー (11200), 20180410_減色パレットとカラーピッカー (2068)" によってロックされています。 20180410_減色パレットとカラーピッカー
こんなふうに別のプロセスで使用されているって出るけど、タスクマネージャーのプロセスタブでは確認できないから、なかなか気づけなかった
別のWindowとMainWindowとの連携する場合にOwnerの指定するときは
アプリ起動完了直後が良さそう、MainWindowのLoadedイベントが適当。
コード
アプリダウンロード先(ヤフーボックス)