VB. net Добавить новый элемент списка в просмотр списка с помощью Checked True? - PullRequest
1 голос
/ 26 февраля 2020

Как установить, что Listviewitem отмечен как True / False с функцией AddRange?

Try
    _lsv.SuspendLayout()
    _lsv.Items.AddRange((From itm In _desrz.Select(           
                             Function(x) New ListViewItem(New String() {
                                 x.FolderName,
                                 x.FolderPath}
                             ))).ToArray)
Catch ex As Exception
    Throw ex
Finally
    _lsv.ResumeLayout() : _lsv.Update() : _lsv.Refresh()
End Try

_desrz - это объект Folder с 3 свойствами: FolderPath, FolderName и FolderChecked. Я могу добавить FolderPath и FolderName к списку, но я не могу установить значение свойства проверки true / false?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2020

Вы можете установить свойство для вновь созданного объекта, используя инициализатор объекта:

New SomeType With {.SomeProperty = someValue, .SomeOtherProperty = someOtherValue}

или с аргументами конструктора:

New SomeType(someArgument, someOtherArgument) With {.SomeProperty = someValue, .SomeOtherProperty = someOtherValue}

В вашем случае ваш тип равен ListViewItem, ваш конструктор - это массив String, а ваше свойство Checked:

New ListViewItem({x.FolderName, x.FolderPath}) With {.Checked = True}
0 голосов
/ 26 февраля 2020

@ jmchinney ответ, и это рабочий код ниже,

          Public Shared Async Function LoadFoldersList(_lsv As ListView, _JsonFoldersListPath As String) As Task(Of Boolean)
        Return Await Task.Run(Async Function()
                                  Dim _rslt As Boolean = False
                                  Dim _itmS As ListViewItemCollection = Nothing
                                  Dim _desrz As List(Of TFolder) = Nothing
                                  Dim _lamLsv As Action = Nothing
                                  Try
                                      If My.Computer.FileSystem.FileExists(_JsonFoldersListPath) Then
                                          Dim _cntnts = My.Computer.FileSystem.ReadAllText(_JsonFoldersListPath)
                                          If Not IsNothing(_cntnts) AndAlso Not String.IsNullOrEmpty(_cntnts) Then
                                              _desrz = Newtonsoft.Json.JsonConvert.DeserializeObject(Of List(Of TFolder))(Await _cntnts.ToDeCryptWOP)
                                              If Not IsNothing(_desrz) Then
                                                  _lamLsv = Sub()
                                                                Try
                                                                    _lsv.SuspendLayout()
                                                                    _lsv.Items.AddRange((From itm In _desrz.Select(
                                                                                                 Function(x) New ListViewItem(New String() {
                                                                                                 x.FolderName,
                                                                                                 x.FolderPath}
                                                                                                 ) With {.Checked = x.Checked})).ToArray)
                                                                Finally
                                                                    _lsv.ResumeLayout() : _lsv.Update() : _lsv.Refresh()
                                                                End Try
                                                            End Sub
                                                  If _lsv.InvokeRequired Then
                                                      _lsv.Invoke(Sub() _lamLsv())
                                                  Else
                                                      _lamLsv()
                                                  End If
                                              End If
                                          End If
                                      End If
                                      _rslt = True
                                  Catch ex As Exception
                                      L.Log.WritelogAsync(ex)
                                  Finally
                                      _lamLsv = Nothing : _desrz = Nothing : _itmS = Nothing 'is that correct for prevent memroy leaking
                                  End Try
                                  Return _rslt
                              End Function)
    End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...