Про ListView
От: Лаломов Юрий Михайлович  
Дата: 22.05.03 07:22
Оценка:
Коллеги. В SDK и MFC была для ListCtrl замечательная вещь LVN_GETDISPINFO. Благодаря этому мне не надо было
заполнять ListCtrl. Он отрисовывался беря данные из моего списка. В ListView я этого не нашел.
Вопрос в следующем. Это удобство присутствует( и я его просто не нашел) или оно отсутствует ?

С уважением, Юрий

23.12.03 16:42: Перенесено модератором из '.NET' — AVK
Re: Про ListView
От: mihailik Украина  
Дата: 23.05.03 06:39
Оценка:
ЛЮМ> В ListView я этого не нашел.

ListView не поддерживает. В ListBox такое есть, или используй DataGrid.

Кстати, .NET Framework configuration (в Administrative Tools) использует DataGrid, когда отображает список сборок в виде таблицы. И нормально прокатывает, с виду — обычный ListView.
... << RSDN@Home 1.0 beta 7a >>
Re[2]: Про ListView
От: Лаломов Юрий Михайлович  
Дата: 23.05.03 06:53
Оценка:
Здравствуйте, mihailik, Вы писали:

ЛЮМ>> В ListView я этого не нашел.


M>ListView не поддерживает. В ListBox такое есть, или используй DataGrid.


M>Кстати, .NET Framework configuration (в Administrative Tools) использует DataGrid, когда отображает список сборок в виде таблицы. И нормально прокатывает, с виду — обычный ListView.


Спасибо за наводку, попробую.
Надыбал я правда код по ListView, но похоже это все работало в 1.0.
А вот в 1.1 проявились проблемы с ListViewItem, но вот как их решить не знаю.(Код взят из конференции на www.gotdotnet.ru).
using System;
using System.Windows .Forms ;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace NativeWndTest2
{
/// <summary>
/// Summary description for MyList.
/// </summary>
public class MyList : ListView
{
private string[] m_Items = new string[1000];

public MyList()
{
for ( int i = 0 ; i < m_Items.GetLength (0) ;i++ ) {
m_Items[i] = "aaa" + i.ToString ();
}
}
protected override CreateParams CreateParams {
get{
CreateParams p = base.CreateParams;
p.Style |= 0x1000;
return p;
}
}
const int WM_USER = 0x0400;
const int WM_NOTIFY = 0x004E;
const int WM_REFLECT = WM_USER + 0x1C00;
const int LVN_FIRST =unchecked ((int)0xFFFFFF9C);
const UInt32 LVN_GETDISPINFO = 0xFFFFFF4F;
const int LVM_FIRST = 0x1000 ;
const int LVM_SETITEMCOUNT = LVM_FIRST + 47;
const int WM_DESTROY = 0x02;

[DllImport("user32.dll")]
static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam,
Int32 lParam);

[StructLayoutAttribute(LayoutKind.Sequential)]
struct NMHDR {
public UInt32 hwndFrom;
public UInt32 idFrom;
public UInt32 code;
}

[StructLayoutAttribute(LayoutKind.Sequential)]
struct LVITEM{
public UInt32 mask;
public Int32 iItem;
public Int32 iSubItem;
public UInt32 state;
public UInt32 stateMask;
public String pszText;
public Int32 cchTextMax;
public Int32 iImage;
public Int32 lParam;
public Int32 iIndent;
public Int32 iGroupId;
public Int32 cColumns;
public Int32 puColumns;
}

[StructLayoutAttribute(LayoutKind.Sequential)]
struct NMLVDISPINFO {
public UInt32 hwndFrom;
public UInt32 idFrom;
public UInt32 code;
public UInt32 mask;
public Int32 iItem;
public Int32 iSubItem;
public UInt32 state;
public UInt32 stateMask;
[MarshalAs(UnmanagedType.LPWStr)] public String pszText;
public Int32 cchTextMax;
public Int32 iImage;
public Int32 lParam;
}
protected override void WndProc(ref Message m){
switch ( m.Msg )
{
case (WM_NOTIFY + WM_REFLECT):
NMHDR hdr = (NMHDR)m.GetLParam (typeof(NMHDR));
switch ( hdr.code )
{
//case
default:
break;
}
break;
case WM_DESTROY:
break;
default:
base.WndProc (ref m);
break;
}
}

public void SetCount(int Count) {
// Count variable not used in this sample. Its always =1000
// to use with m_Items
SendMessage(this.Handle , (Int32)LVM_SETITEMCOUNT, Count, 0);
}
}
}
Re[3]: Про ListView
От: Аноним  
Дата: 23.05.03 07:20
Оценка:
ЛЮМ>Надыбал я правда код по ListView, но похоже это все работало в 1.0.
ЛЮМ>А вот в 1.1 проявились проблемы с ListViewItem, но вот как их решить не знаю.(Код взят из конференции на www.gotdotnet.ru).

Как автору кода интересно, а какие проблемы появились в 1.1 ?
Re[4]: Про ListView
От: Лаломов Юрий Михайлович  
Дата: 23.05.03 07:36
Оценка:
Здравствуйте, Аноним, Вы писали:

ЛЮМ>>Надыбал я правда код по ListView, но похоже это все работало в 1.0.

ЛЮМ>>А вот в 1.1 проявились проблемы с ListViewItem, но вот как их решить не знаю.(Код взят из конференции на www.gotdotnet.ru).

А>Как автору кода интересно, а какие проблемы появились в 1.1 ?


Кликаешь на item , нормально, потом кликаешь на другой item и .....
Дамп проблемы

Unhandled Exception: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: '3' is not a valid value for 'displayIndex'.
at System.Windows.Forms.ListViewItemCollection.get_Item(Int32 displayIndex)
at System.Windows.Forms.ListView.get_FocusedItem()
at System.Windows.Forms.ListView.WndProc(Message& m)

Похоже она хочет взять item из коллекции. А она соответственно пустая.
Re[3]: Про ListView
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.03 21:52
Оценка: 12 (1)
Здравствуйте, Лаломов Юрий Михайлович, Вы писали:

Можешь взять TreeGrid. Там релазизован виртуальный режим. Подсовываешь ему некую реализацию коллекции и он ее отображает.

Доступен или на CVS в проекте Janus. Или здесь ftp://rsdn.ru/team/VladD2/TreeGrid2/TreeGrid2.zip
... << RSDN@Home 1.0 beta 7a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Про ListView
От: Лаломов Юрий Михайлович  
Дата: 25.05.03 10:24
Оценка:
Спасибо, подходит.
Re[5]: Про ListView
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.03 14:46
Оценка:
Здравствуйте, Лаломов Юрий Михайлович, Вы писали:

Ну, тады кое какое описание есть здесь:

http://www.rsdn.ru/forum/Message.aspx?mid=239877&amp;only=1
Автор: VladD2
Дата: 11.04.03
... << RSDN@Home 1.0 beta 7a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Про ListView
От: Лаломов Юрий Михайлович  
Дата: 26.05.03 06:27
Оценка:
О, спасибо, нужная вещь.
Хочу еще пару вопросов задать.
1. Как этот созданный custom control TreeGrid создавать на форме в новом проекте. Нигде в списках контролов он не значится ?
2. Можно ли его как-нибудь отладить. Хотелось бы посмотреть как он функционирует, а то я как говорится начинающий, и много непонятного.

Спасибо, Юрий
Re[7]: Про ListView
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.03 19:44
Оценка:
Здравствуйте, Лаломов Юрий Михайлович, Вы писали:

ЛЮМ>1. Как этот созданный custom control TreeGrid создавать на форме в новом проекте. Нигде в списках контролов он не значится ?


Как обычно. Выбирешь пункт "Add/Remove Item" в Toolbox-е. Далее на закладке ".NET Framework Components" жмешь кномку Browse находишь директорию кде лежит скомпилированные длее-и из проекта... выбираешь ReeGrid.dll и в Toolbox-е появится компонет. На всякий пожарный можно проверить чтобы были ссылки на все три файла.

ЛЮМ>2. Можно ли его как-нибудь отладить. Хотелось бы посмотреть как он функционирует, а то я как говорится начинающий, и много непонятного.


Открой решение RSDN\Janus\TreeGrid2\RSDN.WinForms.sln (проект лучше взять с CVS, о том как это сделать можно узнать в форуме по Янусу (если не ошибаюсь вот инструкция
Автор: AndrewVK
Дата: 27.08.02
).

Там будет 3 проекта.

TreeBase — это базовый интерфейс который нужно реализавать чтобы получить полностью виртуальный грид.
TreeGridBase — низкоуровневая чать грида написанная на МС++.
TreeGrid2 — собственно сам TreeGrid.

Добавляешь в это решение еще один проект типа WinForms (лучше на Шарпе) бросаешь контрол и запускаешся под отладку. В принципе тестовый проект уже есть (TreeGridTest1).
... << RSDN@Home 1.0 beta 8 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.