0

カスタム IDesignerHost 実装で、SplitContainer とまったく同じように、2 つのパネル間にドラッグ可能なスプリッターを提供するユーザー コントロールを作成しようとしています。私が知る限り、SplitContainer 自体はオプションではありません。Visual Studio のデザイナーで使用しない限り、例外が発生します。

私の実装は、必要なマウスイベントを受け取っていないことを除いて、おおよそ次のようになります。ユーザーコントロール自体、ホストコントロール、および親フォームでイベントハンドラー、On*オーバーライド、およびオーバーライドを試みましたが、どこにもイベントWndProcを受信して​​いないようです。このバグレポートによると、「コントロール デザイナー」で受け取る必要があります。この場合、それが何を指しているのかわかりません。WM_MOUSEMOVEWM_LBUTTONDOWNWM_LBUTTONUPWM_MOUSEMOVE

ドラッグ可能なスプリッターを実装する方法はありますか?

4

1 に答える 1

0

方法がわかれば、これは簡単です。

  1. Designerコントロールの属性を、から継承するカスタムクラスに設定しますControlDesigner
  2. メソッドをオーバーライドしOnSetCursorて、スプリッター領域上で、HSplitまたはVSplitカーソルをそれぞれ表示するようにします。このチケットごとに、コントロールのカーソルを設定しないでください(これにより、スタックオーバーフロー、クラッシュ、またはその他の不安定な動作が発生しますが、実際には希望どおりではありません)Cursor.Current
  3. をオーバーライドしOnMouseDragBegin、内部パネルのサイズを変更します。OnMouseDragMoveOnMouseDragEnd
于 2010-07-17T16:59:19.387 に答える