• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#でPictureBoxが二重に表示される)

C#でPictureBoxが二重に表示される

このQ&Aのポイント
  • C#でPictureBoxが二重に表示される現象が起きる場合、フォーカスが移動する作業が中断されている可能性があります。
  • フォーカスをあたらない状態で位置だけ変更する方法を試してみましたが、同じ結果でした。
  • 以前の位置のカーソルを消す方法をご教示いただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>本来の位置のカーソル以外のオブジェクトのある場所が描画されずウィンドウの裏が見えています。 碁盤の描画が正しく行われていない…のでしょう。 フォーム上にpictureBox1とimgCsObjでpictureBoxをそれぞれ配置。 pictureBox1は碁盤としてマス目(1マスのサイズは20x20)を描画したBMPを、imgCsObjはカーソルとして適当な画像(20x20)をプロパティで設定しておき、 pictureBox1のMouseMove()ハンドラを下記の要に記述してみました。 # 算出適当なんで…あんまし正しい位置に表示はされていませんが…まぁ、今回の件とは無関係でしょう。 とくにおかしな状態にはならない…ように見えます。 # マウスカーソルが碁盤の上にある状態でalt+TABキーでアクティブを切り替え、マウスカーソルを少し移動させてからアクティブに戻すと…以前の位置に表示されていたものは新しい位置に表示されます。  private void pictureBox1_MouseMove(object sender, MouseEventArgs e)  {   int sx = (int)Math.Floor((double)(e.X - 10) / 20) + 1;   int sy = (int)Math.Floor((double)(e.Y - 10) / 20) + 1;   imgCsObj.Location = new Point(sx * 20 + pictureBox1.Location.X, sy * 20 + pictureBox1.Location.Y);  }

bara-s
質問者

お礼

解決しました。 原因は、碁盤の外ではカーソル画像を隠そうとMouseLeaveイベントで imgCsObj.Visible = false; としていたことでした。カーソル画像の上にマウス移動したときにもイベントが発生するので意図しない動作になったようです。 勘違いで余計な手間をかけさせてしまい申し訳ありません。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>しかし盤上でマウスを動かすと画像のように二重にカーソルが表示される現象が起きました。 その状態になったときに、Alt+TABキーの操作などで非アクティブにして別のウィンドウを表示させてから再度Alt+TABキーでアクティブに戻したらどうなりますか?

bara-s
質問者

補足

回答ありがとうございます。 Alt+TABキーでアクティブに戻したとき、本来の位置のカーソル以外のオブジェクトのある場所が描画されずウィンドウの裏が見えています。

関連するQ&A