Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для PostalleoN
0 / 0 / 0
Регистрация: 01.05.2012
Сообщений: 21

Определить индекс колонки в listview

04.08.2016, 11:17. Показов 3739. Ответов 6

Студворк — интернет-сервис помощи студентам
Всем привет!

Товарищи-коллеги, прошу вашего совета ибо мозг уже кипит!

Вкратце: есть форма, на ней listview в режиме details. Значит есть столбцы и некие данные в listview.
Вопрос: как понять при нажатии на заголовок столбца, по какому столбцу произошло нажатие?

Конечно есть обработчик события $listview.add_ColumnClick({})... Но он срабатывает при нажатии на заголовок любого столбца

Как я понял копать нужно в сторону классов:
[System.Windows.Forms.ColumnClickEventArg s]
[System.Windows.Forms.ColumnClickEventHan dler]

Естественно есть примеры на VB, WPF, C++ и С#. Например на С#:
C#
1
2
3
4
5
6
7
private void ListView1_ColumnClick(Object sender, ColumnClickEventArgs e) {
 
System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
messageBoxCS.AppendFormat("{0} = {1}", "Column", e.Column );
messageBoxCS.AppendLine();
MessageBox.Show(messageBoxCS.ToString(), "ColumnClick Event" );
}
Но как это адаптировать под PowerShell v 1 вообще никак не могу сообразить... Помогите пожалуйста!

Добавлено через 19 часов 44 минуты
В общем не совсем понятно, как это работает, но главное, что работает....

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Add-Type -AssemblyName System.Windows.Forms
 
#Главная форма
$MainForm = New-Object System.Windows.Forms.Form
 
#Таблица для вывода данных
$ListView1 = New-Object System.Windows.Forms.ListView
$ListView1.View = "Details"
$MainForm.Controls.Add($ListView1)
 
#Создание колонок в таблице с данными
$ListView1.Columns.Add("Наименование").width = 120
$ListView1.Columns.Add("Владелец").width = 140
$ListView1.Columns.Add("Статус УЗ").width = 100
 
#Вроде как переменная для обработки события нажатия на заголовок столбца
$ListView1_ColumnClick = 
    {
    param([object]$sender, [System.Windows.Forms.ColumnClickEventArgs]$e)
    write-host $e.Column
    }
 
#Обработчик события нажатия на заголовок столбца
$ListView1.Add_ColumnClick($ListView1_ColumnClick)
 
#Отображение главной формы
$MainForm.Add_Shown({$MainForm.Activate()})
$MainForm.ShowDialog() | Out-Null
В итоге выводит информацию об индексе столбца: 0, 1 или 2.

Если кто-то сможет объяснить, как это работает - буду признателен!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2016, 11:17
Ответы с готовыми решениями:

Как узнать индекс нажатой колонки в ListView?
Как узнать индекс нажатой колонки в ListView? Добавлено через 3 минуты решил procedure TForm1.ListView1ColumnClick(Sender:...

Определить наличие пустая колонки в Listview
Всем доброго времени суток! На форме Listview. Как определить, что 1. ячейка пуста 2. пуста колонка? Спасибо за помощь и...

Как определить индекс только что добавленного в ListView элемента?
Как определить индекс только что добавленного в ListView элемента? Сам нашел такой вариант listView1.Items.Add(key); key_index =...

6
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
04.08.2016, 14:58
Что там объяснять?
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Add-Type -AssemblyName System.Windows.Forms
#список
$lvItems = New-Object Windows.Forms.ListView -Property @{
  AllowColumnReorder = $true #позволяет менят колонки местами
  Dock = 'Fill' #растягивает список на всю форму
  View = 'Details' #с этим вроде бы все очевидно
}
#добавлет колонки в список
$lvItems.Columns.AddRange((($col = @{
  Наименование = 120; Владелец = 140; Статуc_УЗ = 100 #название, ширина
}).Keys | ForEach-Object { #цикл, создающий колонки с заданными атрибутами
  New-Object Windows.Forms.ColumnHeader -Property @{
    Text = $_; Width = $col[$_]
  }
}))
#собственно, событие, вызываемое при щелчке по заголовку
$lvItems.Add_ColumnClick({
  param(
    [Object]$sender, #объек порождающий событие
    [Windows.Forms.ColumnClickEventArgs]$e #аргуметы события
  )
  
  Write-Host $e.Column
})
#форма
$frmMain = New-Object Windows.Forms.Form -Property @{
  ClientSize = New-Object Drawing.Size(370, 110)
  FormBorderStyle = 'FixedSingle'
  Icon = [Drawing.Icon]::ExtractAssociatedIcon("$PShome\powershell.exe")
  StartPosition = 'CenterScreen'
  Text = 'Form1'
}
#добавляет контролы к форме (в данном случае только один)
$frmMain.Controls.AddRange(@($lvItems))
[void]$frmMain.ShowDialog() #показывает форму
2
 Аватар для PostalleoN
0 / 0 / 0
Регистрация: 01.05.2012
Сообщений: 21
04.08.2016, 15:14  [ТС]
Что там объяснять?
Не понятно было, например, зачем нужна отдельная переменная с параметрами $ListView1_ColumnClick... Теперь, благодаря вам, стало понятно как это все можно объединить в одном обработчике $ListView1.Add_ColumnClick.

А так же как работают классы [Object] (это же класс?) и [Windows.Forms.ColumnClickEventArgs]. Т.е. получается, что при возникновении события Add_ColumnClick из [Object] можно вытащить имя объекта, а из [Windows.Forms.ColumnClickEventArgs] индекс колонки. Но зачем тогда вообще нужно передавать параметр [Object]$sender?
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
04.08.2016, 15:35
Из вопроса ясно, что с .NET Вы только начинаете знакомство. Если так, то кратко: ColumnClickEventArgs - тип, реализующий возможность передачи какой-либо дополнительной информации обработчику, а Object (в данном случае $sender) - объект, порождающий событие. Если непонятно, то советую почитать спецификацию ECMA по C#, Рихтера или обратиться за подробностями к MSDN.
1
 Аватар для PostalleoN
0 / 0 / 0
Регистрация: 01.05.2012
Сообщений: 21
05.08.2016, 07:44  [ТС]
Верно только начинаю... Спасибо за совет, воспользуюсь!
0
210 / 59 / 26
Регистрация: 16.06.2016
Сообщений: 193
05.08.2016, 08:06
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Add-Type -AssemblyName System.Windows.Forms
 
$Form = New-Object system.Windows.Forms.Form
$ListView = New-Object System.Windows.Forms.ListView
$ListView.Location = New-Object System.Drawing.Point(5, 35)
$ListView.Size = New-Object System.Drawing.Size(280, 200)
$ListView.View = [System.Windows.Forms.View]::Details
$LVcol1 = New-Object System.Windows.Forms.ColumnHeader
$LVcol1.Text = "Col1"
$LVcol2 = New-Object System.Windows.Forms.ColumnHeader
$LVcol2.Text = "Col2"
$LVcol3 = New-Object System.Windows.Forms.ColumnHeader
$LVcol3.Text = "Col3"
$LVcol4 = New-Object System.Windows.Forms.ColumnHeader
$LVcol4.Text = "Col4"
 
$Form.Controls.Add($ListView)
$ListView.Columns.AddRange([System.Windows.Forms.ColumnHeader[]](@($LVcol1, $LVcol2, $LVcol3, $LVcol4)))
 
$ListView.add_ColumnClick({write-host $_.Column}) 
 
$Response = $Form.ShowDialog()
0
507 / 160 / 49
Регистрация: 27.02.2016
Сообщений: 831
16.09.2016, 07:48
посмотрите - на английском - там работающие примеры...в т.ч. работа с listview

http://www.codeproject.com/Art... 65081992FB
ну и вообще eye candy
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.09.2016, 07:48
Помогаю со студенческими работами здесь

ListView Колонки и занисение данных в колонки
Здравствуйте... Я установил VIEW на Ditailes.. Теперь есть проблема - Я могу полностью заполнить таким действием - ...

В строке первый символ получает индекс 1, последний индекс 2, второй индекс 3, предпоследний индекс 4, третий индекс 5
В строке первый символ получает индекс 1, последний индекс 2, второй индекс 3, предпоследний индекс 4, третий индекс 5 и так далее. Теперь...

Колонки в listView
Добрый день, у меня уже есть колонки в которые нужно уже записать айди, имя, фамилию и т.д если оставить так как есть то оно...

listview колонки
Компонент listview - как в нём добавить текст во вторую и третью колонки? Можно пользоваться subitems.add для второй колонки, но...

Данные в колонки ListView
Здравствуйте..Столкнулся с такой проблемой...Имеется компонент listview с несколькими колонками...Требуется ее заполнить..Заполнить первые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru