ListView (Вывод данных внизу части списка)
От: Noxerist  
Дата: 28.11.07 21:18
Оценка:
Уважаемые, кто сталкивался с подоюной проблемой на C# — отзовитесь:
Есть список, элементы которого я сам отрисовываю. При добавлении всего 1 элемента в список необходимо чтобы он прорисовывался в нижней части списка. Отрисовку то впринцие я выполняю внизу, но элемент должен быть полно функциональным, т.е тупо нарисовав его внизу и щелнув на нем мышой он не фокусируется т.к. сам итем помещается вверх. Каким-то образом нужно посылать сообщение с координатами этого итема, но каким образом?

WinAPI C#
Re: ListView (Вывод данных внизу части списка)
От: SiAVoL Россия  
Дата: 29.11.07 07:12
Оценка:
Здравствуйте, Noxerist, Вы писали:

N>Каким-то образом нужно посылать сообщение с координатами этого итема, но каким образом?

может проще добавлять элемент в конец списка?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Re[2]: ListView (Вывод данных внизу части списка)
От: Noxerist  
Дата: 29.11.07 17:01
Оценка:
Здравствуйте, SiAVoL, Вы писали:
SAV>может проще добавлять элемент в конец списка?

Проблему как раз и решаю подобным образом, только при добавлении сортрую элементы должным образом, чтобы необходимый элемент и был на нужном месте. Если число элементов списка > числа отображаемых элементов списка (в моем случае 23 элемента), то проблем невозникает, а если число меньше (в моем случае 23) то как раз и нужно перенести их сверху вниз. Кнечно есть вариант добавление при инициализации итемов с текстом ( много пробелов больщое значение для правильной сортировки), но это несколько некрасиво, хотелось бы решить проблему по изящнее, стараюсь не для себя.
Re[3]: ListView (Вывод данных внизу части списка)
От: Pavel M. Россия  
Дата: 30.11.07 10:44
Оценка:
Здравствуйте, Noxerist, Вы писали:

N>Здравствуйте, SiAVoL, Вы писали:

SAV>>может проще добавлять элемент в конец списка?

N>Проблему как раз и решаю подобным образом, только при добавлении сортрую элементы должным образом, чтобы необходимый элемент и был на нужном месте. Если число элементов списка > числа отображаемых элементов списка (в моем случае 23 элемента), то проблем невозникает, а если число меньше (в моем случае 23) то как раз и нужно перенести их сверху вниз. Кнечно есть вариант добавление при инициализации итемов с текстом ( много пробелов больщое значение для правильной сортировки), но это несколько некрасиво, хотелось бы решить проблему по изящнее, стараюсь не для себя.


Приходит в голову такой себе нетривиальный вариант решения. Вы пишете Враппер для своих элементов списка. То есть в список добавляете враппер. Если он находится на "обычном" месте, он отображается и выполняет функции обычного элемента и работает с дочерним "обычным" объектом, если же он находится в конце списка или в конце видимого списка, пусть он работает с вашим "конечным" элементом и отображается должным образом. Надеюсь идея понятна. Таким образом сам список менять не нужно будет. Сортровка будет работать правильно, так как есть возможность перегрузить ToString(). Возможно, в этой идее есть ошибки, думал сходу.
--------------------------
less think — do more
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...
Пока на собственное сообщение не было ответов, его можно удалить.