C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 136 を表示中)
■79934 / )  Re[6]: カラーパレット任意の座標に表示する
□投稿者/ kazu (6回)-(2016/05/30(Mon) 13:29:04)
No79933 (魔界の仮面弁士 さん) に返信
> ■No79932 (kazu さん) に返信
>>出力にmsg=0x110 (WM_INITDIALOG)のメッセージは存在しました。ただし、PictureBoxをクリックしてカラーパレットの標示ボタンを押すと
>>msg=0x110 (WM_INITDIALOG)は取得されない状況です。
>>msg=0x110 (WM_INITDIALOG)が取得されるされない条件等はあるのでしょうか?
>
>
> ・PictureBox クリック後に StripColorBtn を押すと固まる、という事なのでしょうか?
>  それとも、PictureBox のクリック時にもカラーダイアログ表示のためのコードを書いてあるのでしょうか?
>
> ・後者だとした場合、「PictureBox をクリックした場合」にどのようなコードを書いていますか?
>  また、PictureBox のどのイベントを利用していますか?
>

PictureBox クリック後に StripColorBtn を押すと固まります。
PictureBoxのクリックイベントとしてはPicturBoxにcontrolがあるかをforeachで全てのコントロールの背景色を透明にするというものと
stripTextConboボックスのテキストの内容を空白にするという処理は書いてあります。

private void archPaint_Click(object sender, EventArgs e) {
foreach (Control v in archPaint.Controls) {
     v.BackColor = Color.FromArgb(0, 0, 0, 0);
}
this.StripTextCombo.Text = "";
}


> ・そもそも カラーパレットの ShowDialog を呼び出すところまで到達していますか?

PictureBoxをクリックした場合は到達出来ません。
クリックしない場合はColorDialogExでWM_INITDIALOGを取得でき、if文の中に入るので座標が取得でき
StripColorBtn_Clickメソッドのif (dlg.ShowDialog() == DialogResult.OK)に行きカラーパレットが表示されています。



>  WM_INITDIALOG 云々は関係なく、そもそもイベントが呼ばれていなかったという可能性はないでしょうか。
>
> ・カラーパレットをデザイン時に用意しておくのではなく、
>  カラーパレットをイベント処理時に、毎回 new した場合はどうなりますか?
>
>  using(var dlg = new ColorDialogEx())
>  {
>    // archPaint の左上隅にダイアログボックスの座標を合わせて表示する
>    dlg.Position = this.PointToScreen(new Point(archPaint.Left + 20, archPaint.Top + 30));
>    dlg.AllowFullOpen = false;
>    if (dlg.ShowDialog() == DialogResult.OK)
>    {
>      this.StripSelectColorBtn.BackColor = dlg.Color;
>      archPaint._selectColor = dlg.Color;
>    }
>  }

毎回newしてみましたが、同じくpictureBoxをクリックまたは何かしらの動作後にカラーパレットを表示させようとすると固まります。
しかし、出力にはmsg=0x110 (WM_INITDIALOG) hwnd=0x140b52 wparam=0x140c82 lparam=0x109a7018 result=0x0
が表示されていました。
返信 編集キー/


管理者用

- Child Tree -