Была бы форма написал бы в Load, а если контрол?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

RendeRR
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 73
Зарегистрирован: 05.11.2004 (Пт) 18:52
Откуда: Абхазия

Была бы форма написал бы в Load, а если контрол?

Сообщение RendeRR » 27.11.2004 (Сб) 14:23

Доброго времени суток. Вот такая "проблема": создал контрол (расширенный TreeView'ер - типа дерева папок в проводнике Windows). Изначально (при загрузке) в нём должны (по идее:) отображаться 3 nodes'а: соответствующие папкам "Рабочий стол", "Мои документы" и nodes "Мой компьютер". Процедуру, которая должна это всё делать (заполнять TreeView'ер) вызываю в Sub New, и... начинается: Сначала заполнение происходит про помещении контрола на форме, второй раз при загрузке, третий раз при загрузке, если на форму поместить ещё один контрол и т.д. В итоге получаем на загруженной форме контрол с 3*n (n>1, к сожалению) nodes'ами. :о(. Me.Nodes.Clear() перед "заполняющим" событием не помогает. Вот. Как бороться с этим эффектом? Может, существует какое-то правило? Или это у меня код не логичный? Спасибо.
Не знаешь как правильно - делай, как знаешь.

RendeRR
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 73
Зарегистрирован: 05.11.2004 (Пт) 18:52
Откуда: Абхазия

Забыл.

Сообщение RendeRR » 27.11.2004 (Сб) 14:26

Да. Это всё на VB.NET.
Не знаешь как правильно - делай, как знаешь.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 27.11.2004 (Сб) 18:11

Сам по себе вызов New - это нормально. Так и должно быть.

В Вашем случае можно выделить функцию заполнения и вызывать ее в Form_Load. Вариант с очисткой перед заполнение тоже неплохой, возможно, что у Вас какая-то ошибка в коде. Прошу запостить на форум фрагмент Sub New.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

RendeRR
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 73
Зарегистрирован: 05.11.2004 (Пт) 18:52
Откуда: Абхазия

Код:

Сообщение RendeRR » 29.11.2004 (Пн) 15:12

Public Class RendeRR_Explorer

Inherits System.Windows.Forms.TreeView



#Region " Windows Form Designer generated code "



Public Sub New()

MyBase.New()

InitializeComponent()

End Sub

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

Private components As System.ComponentModel.IContainer

Private WithEvents imlForMe As System.Windows.Forms.ImageList

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

components = New System.ComponentModel.Container()

imlForMe = New System.Windows.Forms.ImageList(components)

'

'imlForMe

'

imlForMe.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit

imlForMe.ImageSize = New System.Drawing.Size(16, 16)

imlForMe.TransparentColor = System.Drawing.Color.Transparent

'

'RendeRR_Explorer - это мой контрол

'

Me.ImageIndex = 0

Me.ImageList = imlForMe

Me.Location = New System.Drawing.Point(4, 4)

Me.SelectedImageIndex = 0

Me.Size = New System.Drawing.Size(144, 200)

Me.TabIndex = 1

'!!!

Index()

'!!!

End Sub



#End Region

'...

Private Function Index()

imlForMe.Images.Clear()

'!!!

Me.Nodes.Clear()

'!!!

imlForMe.Images.Add(GetSmalIcon(Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory)))

'GetSmalIcon() возвращает маленькую иконку.

'Добавили в imlForMe иконку рабочего стола

Dim pr As ROOT.CIMV2.Win32.Process

Dim prPatch As String

Dim prColl As ROOT.CIMV2.Win32.Process.ProcessCollection = ROOT.CIMV2.Win32.Process.GetInstances

For Each pr In prColl

If pr.Caption.ToUpper = "EXPLORER.EXE" Then

prPatch = pr.ExecutablePath.ToString()

Exit For

End If

Next

'Это я так иконку Мой компьютер получаю. Ничего лучше не придумал :)

imlForMe.Images.Add(GetSmalIcon(prPatch))

'Добавили в imlForMe иконку Мой Компьютер

imlForMe.Images.Add(GetSmalIcon(Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)))

'Добавили в imlForMe иконку Мои документы. Правда, это простая папка...

Me.Nodes.Add("Рабочий стол").SelectedImageIndex = 0

Me.Nodes.Item(0).ImageIndex = 0

Me.Nodes.Add("Мой компьютер").SelectedImageIndex = 1

Me.Nodes.Item(1).ImageIndex = 1

Me.Nodes.Add("Мои документы").SelectedImageIndex = 2

Me.Nodes.Item(2).ImageIndex = 2

'Заполнили...

End Function

'Результат – см. вопрос :(
Не знаешь как правильно - делай, как знаешь.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 29.11.2004 (Пн) 16:55

А чего вообще мучаться и пытаться написать свой контрол, когда есть уже написаный и весьма удачно?

Посмотрите сюда: http://msdn.microsoft.com/vbasic/defaul ... erpack.asp
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

RendeRR
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 73
Зарегистрирован: 05.11.2004 (Пт) 18:52
Откуда: Абхазия

Сообщение RendeRR » 01.12.2004 (Ср) 17:53

:shock: Правильно! А если подумать, зачем вообще програмировать. :? Столько всего понаписано, кое что даже очень удачно. :lol:
Не знаешь как правильно - делай, как знаешь.

Valery
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 18.11.2004 (Чт) 13:16

Сообщение Valery » 01.12.2004 (Ср) 21:23

кинул бы уж весь код... это я серьезно...
И как я только раньше программы писал... и как они только работали?!

RendeRR
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 73
Зарегистрирован: 05.11.2004 (Пт) 18:52
Откуда: Абхазия

Сообщение RendeRR » 02.12.2004 (Чт) 19:23

Так это, собственно, и есть весь код. Вернее не весь, а весь, который работает не так, как я хочу :wink: . Припиши в конце End Class и всё. :D
Не знаешь как правильно - делай, как знаешь.

RendeRR
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 73
Зарегистрирован: 05.11.2004 (Пт) 18:52
Откуда: Абхазия

Сообщение RendeRR » 24.12.2004 (Пт) 16:43

gaidar писал(а):А чего вообще мучаться и пытаться написать свой контрол, когда есть уже написаный и весьма удачно?

Посмотрите сюда: http://msdn.microsoft.com/vbasic/defaul ... erpack.asp


Именно "проводник" там кривее всего и работает :)
См. здесь:
http://rsdn.ru/Forum/Message.aspx?mid=963896#963896
Не знаешь как правильно - делай, как знаешь.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

    TopList