PDA

Показать полную графическую версию : Visual Basic 2008


Страниц : 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18

Admiral
25-06-2008, 16:08
Самый близкий к For Each ... Next цикл For ... Next вот на примере их сравнивание и покажу разницу.
For Each ... Next удобен, когда необходимо проделать действия с каждым элементом массива, не задумываясь о количестве его элементов
Sub AddNamesToList(ByVal ParamArray NamesArray() As Object)
Dim x As Object
For Each x In NamesArray
ListBox1.Items.Add(x)
Next x
End Sub
после этого в коде пишем AddNamesToList("A", "B", ...."Пока не надоест ")
Для цикла на базе с For ... Next потребуется уточнения про количество параметров, которые передаются
Sub AddNamesToList(ByRef I As Integer, ByVal ParamArray NamesArray() As Object)
Dim x As Integer
For x = ListBox1.Items.Count + 1 To ListBox1.Items.Count + I
‘ListBox1.Items.Add(NamesArray(Rem...))
Next x
End Sub
AddNamesToList(3, "A", "B", "Теперь указанно, что три элемента ")
и намного больше времени на адаптацию самого кода добавления в список, что б получить тот же эффект что и в предыдущем коде.
С другой стороны иногда требуется сделать выборку не по всем элементам массива, тогда удобнее For ... Next. Да можно и в For Each ... Next указать через If/Select Case и т.д. какие элементы интересуют, но это уже усложнения, проще взять For ... Next, например указывая только чётные элементы
For iCounter = 0 to 10 Step 2
...
Next iCounter

Вот ещё два примера сравнений двух структур
Dim i As Integer
For i = 0 To ListBox1.Items.Count - 1
{ statements to process item ListBox1.Items(i) }
Next
...
Dim itm As Object
For Each itm In ListBox1.Items
{ process the current item, represented by the itm variable }
Next

http://www.askit.ru/custom/progr_admin/m02/02_07_vbscript_loops.htm страница хоть и про VbScript но объяснение про циклы катит.

Uzvern
26-06-2008, 18:00
У меня есть перменная. Dim AllDrive() As ArrayList Мне нужно сделать, чтобы в неё добавлялись пареметры. Как это сделать?

Admiral
26-06-2008, 18:59
AllDrive.Add("a")
AllDrive.Add("b")
AllDrive.Add("c")
'...
ArrayList.Item Property (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.item.aspx)

Uzvern
26-06-2008, 21:45
Debug.Print("Element {0} is ""{1}""", 2, stringList(2))

Хы, прикольная штука. А её ещё где-нить можно применить? :unsure:

Как сделать, чтобы курсор был по середине кнопки?

Admiral
27-06-2008, 18:18
http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.aspx
Только в отладке разработчиком, пользователю оно не доступно.

Это когда проводишь курсором на кнопке, что б он по центру выскакивал, или когда где-то на форме и нужно указать его положение по центру кнопки?
В любом случаи команда
Windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30)
в первом случаи её нужно указать в событии на движении по нужной кнопке, а во втором по движению на форме.
Вспомогательные координаты необходимо будет подрегулировать в зависимости от размеров кнопки.

Uzvern
27-06-2008, 19:48
Admiral, о, спасибо. Вот ещё задачка :

Как мне во вторую колонку добавить текст?
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim ListView1 As New ListView

Controls.Add(ListView1)
ListView1.Dock = DockStyle.Fill
ListView1.View = View.Details

With ListView1.Items
.Add("1")
.Add("2")
.Add("3")
.Add("4")
.Add("5")
End With

ListView1.Columns.Add("1", 70)
ListView1.Columns.Add("2", 70)

End Sub
End Class

На первый вопрос - решение найдено :
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim ListView1 As New ListView

Controls.Add(ListView1)
ListView1.Dock = DockStyle.Fill
ListView1.View = View.Details

ListView1.Columns.Add("Name", 50)
ListView1.Columns.Add("Item : Name", 78)

Dim Col As ListViewItem

Col = ListView1.Items.Add("A")
Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})
Col = ListView1.Items.Add("B")
Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})
Col = ListView1.Items.Add("C")
Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})
Col = ListView1.Items.Add("D")
Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})
Col = ListView1.Items.Add("E")
Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})


End Sub
End Class

Как можно создать ярлык?

Admiral
28-06-2008, 16:00
Ещё как вариант
With ListView1
.Items(0).SubItems.Add("1")
.Items(1).SubItems.Add("2")
.Items(2).SubItems.Add("3")
.Items(3).SubItems.Add("4")
.Items(4).SubItems.Add("5")
End With
Повторное использования кода добавит указанные значения в третью колонку, при условии, что она существует. В VB.NET принято заполняют ряды, а потом разбивать их по колонкам.
ListView.Columns Property (http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columns.aspx)

Create shortcuts with a .NET application (http://www.geekpedia.com/tutorial125_Create-shortcuts-with-a-.NET-application.html)*

Вроде простое дело - создать ярлык. Но встроенного в .Net Framework средства нет. Во всяком случаи я такой возможности не нашёл, и приходится использовать COM объэкт. В литературе использование COM в .NET крайне не рекомендуется в связи с повышенным ресурсо потреблением. Может при создании ярлыка оно и не заметно, но в больших проектах использования связки COM в .NET жутко забивает оперативную память, так что можно использовать такие приложения как бенчмарк.

Не использовать COM в .NET при создании скриншота можно, если воспользоваться мастером создания установщиков
Walkthrough: Deploying a Windows-based Application (http://msdn.microsoft.com/en-us/library/k3bb4tfd.aspx)
How to build an installer by using Visual Basic .NET or Visual Basic 2005 (http://support.microsoft.com/kb/821766)
How to create shortcuts for a Visual Studio 2005 or Visual Studio .NET setup and deployment project (http://support.microsoft.com/kb/307358/)
Adding and Removing Shortcuts in the File System Editor (http://msdn.microsoft.com/en-us/library/aa291416.aspx)
Доступен в не Express редакциях.

Uzvern
02-07-2008, 16:48
Как узнать номер выделеного эллемента в ListView1?

Admiral
02-07-2008, 20:24
ListView1.SelectedItems.Item(0)

Uzvern
03-07-2008, 17:55
Admiral, этот код позволяет щелкнуть 1 раз, дальше выдает ошибку :
InvalidArgument=Value of '0' is not valid for 'index'. Parameter name: index

Public Class Form1

Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
Me.Text = ListView1.SelectedItems.Item(0).Text
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With ListView1.Items
For a As Integer = 1 To 10
.Add(a)
Next
End With
End Sub
End Class

Admiral
03-07-2008, 18:09
Нужна проверка
If ListView1.SelectedItems.Count > 0 Then
перед Me.Text = ListView1.SelectedItems.Item(0).Text
Кстати приведённый выше код показывает значение выделенного элемента, а следующий
Me.Text = ListView1.SelectedItems.Item(0).Index
номер элемента.

Uzvern
04-07-2008, 14:06
Можно ли как-то изменить стандартное выпадающее меню (что-нибудь добавить, убрать или вообще сделать свое) ?
http://i25.tinypic.com/dbjwas.jpg

Admiral
04-07-2008, 14:19
Uzvern, простым способом нет. Это как ситуация с MsgBox. Писать своё или юзать какие-то недокументированные АПИ.

Uzvern
04-07-2008, 14:40
Admiral, а как можно свое написать? :) Примеры есть?
Кстати, можно ли как-то уменьшить объем потребления RAM ?

Admiral
04-07-2008, 15:28
У меня таких примеров нету, но они должны быть в Интернете. Нужен правильный перевод этого меню - Drop Down не совсем подходит ибо показывает ASP.NET решения.

Скажите спасибо .NET Frameworks за нещадное потребление оперативы, в VB6 большинство прог укладывались в 10 Мб употребления ОЗУ, а то и меньше, ведь постоянно нужная библиотека msvbvm60.dll занимает от силы 1,32 MB. А в нете даже самый примитивный уже более 20 МБ.
Память и .Net (http://www.rsdn.ru/Forum/Info/FAQ.dotnet.memoryuse.aspx)
Определить сколько в действительности употребляет прога написанная с использование .NET можно исходя из рекомендаций в этой статье How much memory does my .NET application use? (http://www.itwriting.com/dotnetmem.php)
В этом топике How to minimize memory usage (http://www.clubfarpoint.com/Forums/forums/thread/63029.aspx) автор задался аналогичным вопросом, когда перенёс свой код с VB6/COM на VB.Net
А здесь задан идентичный вопрос VB.Net Application using too much Memory (http://forums.speedguide.net/showthread.php?t=134650)

Можно уменьшить момент большого употребления увеличив скорость работы
Скорость Reflection .Net (http://www.rsdn.ru/article/dotnet/reflectionspeed.xml)
Эта статья должна помочь создать более быстрые и менее ресурсоемкие приложения
GC в .NET (http://www.rsdn.ru/article/dotnet/GC.xml)
Так же про работу автоматики
Автоматическое управление памятью в .NET (http://www.rsdn.ru/article/dotnet/GCnet.xml)
И общие рекомендации по кодированию As is или история о том как не надо писать код (http://www.rsdn.ru/article/dotnet/asis.xml)

Uzvern
06-07-2008, 21:41
Можно ли как-то сворачивать код? Не сами дейсвия (Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load), а код, например вот этот :

ListViewAllDrives.Columns.Add("Имя", 75)
ListViewAllDrives.Columns.Add("Тип", 75)

ListViewHardDrives.Columns.Add("Имя", 75)
ListViewHardDrives.Columns.Add("Тип", 75)

ListViewRemovable.Columns.Add("Имя", 75)
ListViewRemovable.Columns.Add("Тип", 75)


Типа как с #Region "123"
#End Region

Admiral
06-07-2008, 23:56
Через редакторы это можно делать визуально, а кодом это возможно, если назвать скрываемый блок как-то. Только это должен быть цельный блок (вместе с объявлением Sub, Function, Procedyre...), а не часть блока.

Uzvern
07-07-2008, 20:19
Как можно вывести состояние BackgroundWorker1 (работает или нет (True False) ) в Me.Text

Admiral
07-07-2008, 22:11
Me.Text = BackgroundWorker1.WorkerReportsProgress
Так же про использование BackgroundWorker (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx) есть статья Using the BackgroundWorker Component in .NET 2 applications (http://www.c-sharpcorner.com/UploadFile/LivMic/BGWorker07032007000515AM/BGWorker.aspx) правда там код на C#, но пример визуально ясен.

Uzvern
11-07-2008, 23:56
Можно ли как-то выдрать значение из Консоли?




© OSzone.net 2001-2012