DragEnterおよびDragLeaveイベント中に、ドラッグターゲットコントロールをトリガして(無効またはリフレッシュを介して)自分自身を再描画したいと思います。それは実際にこれらのイベント内)のOnPaintメソッドは、最新の情報に更新(によって呼び出されていない、コントロールを再描画しませんドラッグアンドドロップ中の再描画
protected override void OnDragEnter (DragEventArgs drgargs)
{
//-- Set a property that affects drawing of control, then redraw
this.MyProperty = true;
this.Refresh(); //-- Does nothing???
}
protected override void OnDragLeave (EventArgs e)
{
//-- Set a property that affects drawing of control, then redraw
this.MyProperty = false;
this.Refresh(); //-- Does nothing???
}
:コードは次のようになります。これを行う方法はありますか?私はここで何かを理解してはいけません。
更新: jasonhが提供する回答は実際には機能しません。 Invalidate()またはInvalidate(rect)を使用すると、コントロールは実際には更新されません。これは、の間に、ドラッグ&ドロップアクションであると呼ばれています。他のアイデア?ドラッグアンドドロップ中にコントロールの再描画をトリガーできますか?ありがとう!
更新日2:サンプルプロジェクトを作成しましたが、ではなく、になりました。一言...私は最終的に問題を引き起こしていたOnPaintのいくつかのコードを追跡しました。だから、これはデバッガがどのように働いたかを理解していない私より多くのものでした(OnPaintのブレークポイントを打つことは決してありませんでした。 Invalidate()、Refresh()は両方とも動作します。 JasonHは最終的に正しいと答えただけでなく、コントロールの一部を無効にする方法を示した...私はそれについて知らなかった。
ありがとうございました!
あなたはAllowDropをtrueに設定していないと思います。 – jasonh
はい、AllowDropがtrueに設定されています。ドラッグ&ドロップが起こっています。コントロールの再描画だけではありません(OnPaintはInvalidate()またはRefresh()の後に呼び出されません)。 –