Re[4]: ListView (Вывод данных внизу части списка)
От: Noxerist  
Дата: 30.11.07 18:08
Оценка:
Здравствуйте, 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);
        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.