これを説明するのは難しいでしょう。
カスタムコントロールの動作は次のとおりです。
- ContainerControlとVScrollBarを含むカスタムリストビューを作成しました
- リストビュー内のアイテムはContainerControlに追加され、スクロール移動すると、アイテムはContainerControl内で再配置されます。
これがカスタムリストビューの基本的な考え方です。
現在:各ListviewItemの高さは111で、チャームのように機能します。正確に295個のアイテムを追加するまで、その後のアイテムは奇妙に見えるものになります。
各ListviewItemには、Picturebox、プログレスバー、ラベル、いくつかのボタン、Paintイベントのカスタムペイントなどが含まれています。
これで、(Paintイベントで)ペイントされるListviewItemsのすべてが正しく配置されます。ただし、Controls.Add()で追加されているコントロールの一部(!)はそうではなく、負のY値を取得しているように見えます。
SomeControl.Location = new Point(x、y)の後にブレークポイントを設定すると、コントロールは正しい値になりますが、Controls.Add()を使用してListviewItemにコントロールを追加した後、Y値は負になります。最も奇妙な部分は、一部のコントロールがこれを取得しないことです。これは、この問題を解決する方法である可能性があります。
私が理解しようとしていることを理解していただければ幸いです。何か理解できないことがあれば、私に聞いてください。
編集:これはWinFormsです。Control.Location = x;だけなので、多くのコードを表示することはできません。およびControls.Add(c);