2016-05-02 14 views
0

これはWinFormsユーザーにとって些細な質問であり、私はゲームプログラミングの背景から来ており、WinForms APIはこれまでとはまったく違うゲームでUIをやっているのですが、これはWinFormsで初めてのことです。ページがスクロールするときにネストされたパネルの相対座標を取得する方法

私はそのパネルにアタッチされたUserControlを持っています。このパネルには、多くの行と1つの列を持つTableLayoutPanelがあり、これらの各行にはイメージを表示するPanelがあります。階層は次のようになります。

UserControl 
|- Panel (I use this one to scroll the child of this) 
    |- TableLayoutPanel (many rows, 1 column, one panel per row) 
     |- Panel1 (contains an image) 
     |- Panel2 (contains an image) 
     ... 
     |- PanelN (contains an image) 

実行中に各行とパネルが作成されます。

このTableLayoutPanelは、通常、1つの画面に収まるには高すぎるため、スクロールするように親パネルが設定されています。

これは私の問題です:すべてのリーフパネル(Panel1-PanelN)を検索し、現在画面に表示されているものを見つける必要があります。私は各Panelの場所(Panel1.Location)を取って、どのY座標が0に最も近いかを見て、それを私の出発点として使用することでこれをしようとしています。問題は、便利なデータを得るために、PointToScreen、RectangleToClient、RectangleToScreenなどの呼び出しを適切に組み合わせることができないように思えることです。これらの呼び出しから得られるPoint/Rectangleにかかわらず、それらは一定(つまり、移動していない親TableLayoutPanelに関連して定義される)のY値を持つか、またはスクロールバーで移動しますが、画面上のウィンドウの位置、またはUserControlの上にある他のいくつかの親要素に対する相対位置です。

スクロールバー(パネル上)がページの一番上にあるときに、(x、0)を返すようにPanel1の位置を取得するには、どのような呼び出しが必要ですか? 、y < 0)をスクロールダウンしますか?

私はこれらのstackoverflowの質問(とかなりの数の他のリソース)を見てきましたが、それらのコードは私の問題を支援しませんでした: Getting The Location Of A Control Relative To The Entire Screen?c# absolute position of control on screenHow to get the Screen position of a control inside a group box control?

答えて

0

は試してみてくださいPanel1.Top + TableLayout1.Top - Panel.VerticalScroll.Value

関連する問題