Показать полную графическую версию : Visual Basic 2008
Страниц :
1
2
3
4
5
6
7
[
8]
9
10
11
12
13
14
15
16
17
18
Самый близкий к 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 но объяснение про циклы катит.
У меня есть перменная. Dim AllDrive() As ArrayList Мне нужно сделать, чтобы в неё добавлялись пареметры. Как это сделать?
AllDrive.Add("a")
AllDrive.Add("b")
AllDrive.Add("c")
'...
ArrayList.Item Property (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.item.aspx)
Debug.Print("Element {0} is ""{1}""", 2, stringList(2))
Хы, прикольная штука. А её ещё где-нить можно применить? :unsure:
Как сделать, чтобы курсор был по середине кнопки?
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)
в первом случаи её нужно указать в событии на движении по нужной кнопке, а во втором по движению на форме.
Вспомогательные координаты необходимо будет подрегулировать в зависимости от размеров кнопки.
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
Как можно создать ярлык?
Ещё как вариант
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 редакциях.
Как узнать номер выделеного эллемента в ListView1?
ListView1.SelectedItems.Item(0)
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
Нужна проверка
If ListView1.SelectedItems.Count > 0 Then
перед Me.Text = ListView1.SelectedItems.Item(0).Text
Кстати приведённый выше код показывает значение выделенного элемента, а следующий
Me.Text = ListView1.SelectedItems.Item(0).Index
номер элемента.
Можно ли как-то изменить стандартное выпадающее меню (что-нибудь добавить, убрать или вообще сделать свое) ?
http://i25.tinypic.com/dbjwas.jpg
Uzvern, простым способом нет. Это как ситуация с MsgBox. Писать своё или юзать какие-то недокументированные АПИ.
Admiral, а как можно свое написать? :) Примеры есть?
Кстати, можно ли как-то уменьшить объем потребления RAM ?
У меня таких примеров нету, но они должны быть в Интернете. Нужен правильный перевод этого меню - 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)
Можно ли как-то сворачивать код? Не сами дейсвия (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
Через редакторы это можно делать визуально, а кодом это возможно, если назвать скрываемый блок как-то. Только это должен быть цельный блок (вместе с объявлением Sub, Function, Procedyre...), а не часть блока.
Как можно вывести состояние BackgroundWorker1 (работает или нет (True False) ) в Me.Text
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#, но пример визуально ясен.
Можно ли как-то выдрать значение из Консоли?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.