1

標準の Control クラスを継承するカスタムの WinForms グリッド コントロールがあります。ユーザーは、カスタム動詞と対話型の列コレクション エディターを使用して設計時に列を作成できますが、通常のマウス アクションを使用して設計時に対話的に作成された列のサイズを変更することはできません (Windows エクスプローラーでの列のサイズ変更と同様)。

これを可能にするため、つまり、マウス ポインターがその領域上にあるときにすべてのマウス入力をグリッド ヘッダーに渡すために、コントロールにアタッチされたデザイナーの GetHitTest メソッドをオーバーライドしました (ControlDesigner を継承します)。構造的には、次のようになります。

protected override bool GetHitTest(System.Drawing.Point point)
{
  if (IsMouseInGridHeaderArea())
    return true;
  else
    return false;
}

マウス ポインターを移動するだけで、すべてがほぼ期待どおりに機能します。ユーザーがマウスを移動すると、デザイン タイムに列ヘッダーが正しく強調表示され、マウス ポインターが二重矢印の WE サイズ変更カーソルに変更されます。列分割領域の上にあります。後者の場合の唯一の小さな問題は、カーソルが、コントロール全体を選択/移動できることを示す 4 矢印カーソルに常に変更されることです (WinForms フォーム デザイナーのフォーム上のすべてのコントロールの標準的な動作)。

列のサイズ変更を実行できるときにマウスの左ボタンを押したままにすると、何も起こりません。グリッド コントロール全体でさえ、フォーム上で移動しません。

この問題を解決するにはどうすればよいですか?

4

0 に答える 0