private ScrollLockMode GetScrollLockMode(DetailsListView listView)
{
if (this._statuses.SortMode == ComparerMode.Id)
{
if (this._statuses.SortOrder == SortOrder.Ascending)
{
// Id昇順
if (this.ListLockMenuItem.Checked)
return ScrollLockMode.None;
// 最下行が表示されていたら、最下行へ強制スクロール。最下行が表示されていなかったら制御しない
// 一番下に表示されているアイテム
var bottomItem = listView.GetItemAt(0, listView.ClientSize.Height - 1);
if (bottomItem == null || bottomItem.Index == listView.VirtualListSize - 1)
return ScrollLockMode.FixedToBottom;
else
return ScrollLockMode.None;
}
else
{
// Id降順
if (this.ListLockMenuItem.Checked)
return ScrollLockMode.FixedToItem;
// 最上行が表示されていたら、制御しない。最上行が表示されていなかったら、現在表示位置へ強制スクロール
var topItem = listView.TopItem;
if (topItem == null || topItem.Index == 0)
return ScrollLockMode.FixedToTop;
else
return ScrollLockMode.FixedToItem;
}
}
else
{
return ScrollLockMode.FixedToItem;
}
}