0

FlowLayoutPanel コントロールを使用して、動的に構築されたピクチャ ボックスを表示する Windows フォーム アプリケーションがあります。並べ替えを希望する可能性があるため、ドラッグ ドロップ効果を有効にしました。これは、いくつかの画像ボックス (現在、画面に約 6 つ表示されています) でのみ正常に機能しますが、それ以上の画像ボックスがある場合は、コントロールの下にアイテムをドラッグしようとしても機能しません。スクロールするため、現在画面に表示されている画像 (画像 4 など) を、表示されている画像の下にある画像 (画像 13 など) に配置することはできません。

ScrollControllIntoViewMethod を使用する必要があるいくつかの投稿を見てきましたが、いくつかの場所で試してみましたが失敗しました。

ありがとう!

4

1 に答える 1

2

これが私がやったことです。

DragLeave イベントでイベントを作成する
コントロールの位置を取得する
コントロールの高さを計算して下限を取得します。
マウスの位置を確認し、境界を超えている場合は、定数の値で垂直スクロール (または水平スクロール) を変更します。

private void thumbFlow_DragLeave(object sender, EventArgs e)
{
    int BegY_ThumbFlow = this.thumbFlow.FindForm().PointToClient(this.thumbFlow.Parent.PointToScreen(this.thumbFlow.Location)).Y;
    int thumbFlowBound_Y = this.thumbFlow.Height + BegY_ThumbFlow;
    int mouseY = this.thumbFlow.FindForm().PointToClient(MousePosition).Y;

    while (mouseY >= thumbFlowBound_Y)
    {
        thumbFlow.VerticalScroll.Value = thumbFlow.VerticalScroll.Value + DRAG_DROP_SCROLL_AMT;
        mouseY = thumbFlow.FindForm().PointToClient(MousePosition).Y;
        thumbFlow.Refresh();
    }

    while (mouseY <= BegY_ThumbFlow)
    {
        thumbFlow.VerticalScroll.Value = thumbFlow.VerticalScroll.Value - DRAG_DROP_SCROLL_AMT;
        mouseY = thumbFlow.FindForm().PointToClient(MousePosition).Y;
        thumbFlow.Refresh();
    }
}

これが他の人に役立つことを願っています。

于 2012-09-11T22:08:11.443 に答える