Здравствуйте, Pavel M., Вы писали:
PM>Приходит в голову такой себе нетривиальный вариант решения. Вы пишете Враппер для своих элементов списка. То есть в список добавляете враппер. Если он находится на "обычном" месте, он отображается и выполняет функции обычного элемента и работает с дочерним "обычным" объектом, если же он находится в конце списка или в конце видимого списка, пусть он работает с вашим "конечным" элементом и отображается должным образом. Надеюсь идея понятна. Таким образом сам список менять не нужно будет. Сортровка будет работать правильно, так как есть возможность перегрузить ToString(). Возможно, в этой идее есть ошибки, думал сходу.
Я наверное тоже не совсем, понял Вас, но помоему — враппер это обертка для моих данных, и каким бы хитрым он небыл, если число элементов списка = 1, а число отображаемых элементов 20 , то как не крути, но этот 1 элемент нужно отобразить внизу списка. Как я только не пытался — и свойство Items[i].Position менял, и гдето нашел (код ниже) всеравно элемент на месте поумолчанию. Такое ощущение что нужно писать контрол с нуля — который, как мне кажется, небудет достаточно быстрым, а требования по скорости полностью неудоволетворяет и стандартный контрол)
[System.Runtime.InteropServices.StructLayout(System .Runtime.InteropServices.LayoutKind.Sequential, Pack=2)]
public struct MAKELPARAM
{
public ushort wLow;
public ushort wHigh;
}
[System.Runtime.InteropServices.DllImport("User32.dll")]
public extern static int SendMessage(IntPtr hwnd, int message, int wparam, MAKELPARAM lparam);
private void SetItemPosition(int i, int x, int y)
{
MAKELPARAM M = new MAKELPARAM();
M.wHigh = (ushort)x; //New x-position of the item's upper-left corner, in view coordinates.
M.wLow = (ushort)y; //New y-position of the item's upper-left corner, in view coordinates. ;
SendMessage(this.Handle, 0x1000 + 15, i, M);
}