С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/2938: Рейтинг темы: голосов - 2938, средняя оценка - 4.99
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014

Готовые решения и полезные коды на Visual Basic .NET (Часть-1)

18.08.2011, 22:44. Показов 577227. Ответов 250
Метки faq (Все метки)

Студворк — интернет-сервис помощи студентам
Предлагаю в этой теме размещать ответы на часто задаваемые вопросы и просто делиться полезными кодами.
Обращаю внимание на некоторые моменты, которые являются дополнением к основным правилам
  1. Запрещается копировать материалы с других сайтов или форумов
  2. Решения должны быть написаны с использованием языка Visual Basic .NET
  3. Запрещено создавать посты с уточнениями и замечаниями. Такие вопросы задавайте на форуме
  4. Код, в котором присутствуют комментарии, читается и понимается намного легче и быстрее
  5. Длинные коды и объемные вопросы одного содержания заключайте в теги [SPОILER]Большой код[/SPОILER]
  6. При создании поста убедитесь, что этот вопрос не был освещен ранее
  7. Код должен быть написан грамотно, большие и неэффективные коды будут удаляться
  8. Список вопросов по конкретной теме нельзя "разрывать" на 2 и более поста

Просьба к постившим: не спешите постить решения "сгоряча", тщательно обдумайте список вопросов, их тематику и порядок
Если вы найдете информацию, которой можно было бы дополнить ваши предыдущие сообщения, что-то изменить или перегруппировать, пишите в л/с.

 Комментарий модератора 
Данные правила обязательны к исполнению в рамках темы


Примечание: некоторые коды приведены без учета строгой типизации (Параметр Strict), поэтому для их использования необходимо выполнить приведение типов
55
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.08.2011, 22:44
Ответы с готовыми решениями:

Готовые решения и полезные коды на Visual Basic .NET (Часть-2)
Данная тема является продолжение одноимённой темы https://www.cyberforum.ru/vb-net/thread343195.html Предлагаю в этой теме размещать...

Готовые решения и полезные коды на Visual Basic 6.0
Запрещаются любые обсуждения выложенных здесь работ (читаем спойлер). Собственно тут буду публиковать разные коды (как собственные или...

Продам готовые коды и решения на Visual Basic за 400 рублей
душу продаю:cry: Продам коды исходные на VB !!10 лет копил за 400р !!размер тока кодов 312метров там есть все ! мыло контакты удалены....

250
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
13.04.2014, 06:08
Студворк — интернет-сервис помощи студентам
Элемент TabsStripControl на замену элемента TabControl

Кликните здесь для просмотра всего текста
VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
Public Class TabsStripControl
    Inherits UserControl
    Event TabClick(sender As Object, e As TabPage)
 
    Private Sub TabsStripControl_Load(sender As Object, e As EventArgs) Handles Me.Load
        SetStyle(ControlStyles.AllPaintingInWmPaint Or
                 ControlStyles.OptimizedDoubleBuffer Or
                 ControlStyles.ResizeRedraw Or
                 ControlStyles.UserPaint, True)
    End Sub
    Sub New()
        InitializeComponent()
    End Sub
    Private Sub InitializeComponent()
        Me.PanelHostContext = New System.Windows.Forms.Panel()
        Me.PanelHostElement = New System.Windows.Forms.Panel()
        Me.PanelHostTabs = New System.Windows.Forms.Panel()
        Me.PanelHostElementWin = New System.Windows.Forms.Panel()
        Me.PanelHostContext.SuspendLayout()
        Me.PanelHostElement.SuspendLayout()
        Me.SuspendLayout()
        '
        'PanelHostContext
        '
        Me.PanelHostContext.BackColor = System.Drawing.Color.Transparent
        Me.PanelHostContext.Controls.Add(Me.PanelHostTabs)
        Me.PanelHostContext.Dock = System.Windows.Forms.DockStyle.Top
        Me.PanelHostContext.Location = New System.Drawing.Point(0, 0)
        Me.PanelHostContext.Name = "PanelHostContext"
        Me.PanelHostContext.Size = New System.Drawing.Size(470, 23)
        Me.PanelHostContext.TabIndex = 0
        '
        'PanelHostElement
        '
        Me.PanelHostElement.BackColor = System.Drawing.Color.Transparent
        Me.PanelHostElement.Controls.Add(Me.PanelHostElementWin)
        Me.PanelHostElement.Dock = System.Windows.Forms.DockStyle.Fill
        Me.PanelHostElement.Location = New System.Drawing.Point(0, 23)
        Me.PanelHostElement.Name = "PanelHostElement"
        Me.PanelHostElement.Padding = New System.Windows.Forms.Padding(1)
        Me.PanelHostElement.Size = New System.Drawing.Size(470, 306)
        Me.PanelHostElement.TabIndex = 1
        '
        'PanelHostTabs
        '
        Me.PanelHostTabs.AutoSize = True
        Me.PanelHostTabs.Dock = System.Windows.Forms.DockStyle.Left
        Me.PanelHostTabs.Location = New System.Drawing.Point(0, 0)
        Me.PanelHostTabs.Name = "PanelHostTabs"
        Me.PanelHostTabs.Size = New System.Drawing.Size(0, 23)
        Me.PanelHostTabs.TabIndex = 0
        '
        'PanelHostElementWin
        '
        Me.PanelHostElementWin.BackColor = System.Drawing.Color.WhiteSmoke
        Me.PanelHostElementWin.Dock = System.Windows.Forms.DockStyle.Fill
        Me.PanelHostElementWin.Location = New System.Drawing.Point(1, 1)
        Me.PanelHostElementWin.Name = "PanelHostElementWin"
        Me.PanelHostElementWin.Size = New System.Drawing.Size(468, 304)
        Me.PanelHostElementWin.TabIndex = 0
        '
        'TabsStripControl
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.Controls.Add(Me.PanelHostElement)
        Me.Controls.Add(Me.PanelHostContext)
        Me.Name = "TabsStripControl"
        Me.Size = New System.Drawing.Size(470, 329)
        Me.PanelHostContext.ResumeLayout(False)
        Me.PanelHostContext.PerformLayout()
        Me.PanelHostElement.ResumeLayout(False)
        Me.ResumeLayout(False)
 
    End Sub
    Private WithEvents PanelHostContext As System.Windows.Forms.Panel
    Private WithEvents PanelHostElement As System.Windows.Forms.Panel
    Private WithEvents PanelHostTabs As System.Windows.Forms.Panel
    Friend WithEvents PanelHostElementWin As System.Windows.Forms.Panel
 
    Private Sub TabsStripControl_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        With e.Graphics
            .FillRectangle(New SolidBrush(Color.FromArgb(245, 245, 245)),
                            0, PanelHostContext.Height - 1,
                            sender.Width - 1, sender.Height - PanelHostContext.Height - 1)
            .DrawRectangle(New Pen(Color.FromArgb(204, 206, 219)),
                           0, PanelHostContext.Height - 1, sender.Width - 1,
                           sender.Height - PanelHostContext.Height - 1)
 
            .DrawLine(New Pen(Color.FromArgb(0, 122, 204), 2),
                               0, PanelHostContext.Height - 1,
                               sender.Width, PanelHostContext.Height - 1)
        End With
    End Sub
 
    Public Function AddTab(name As String, text As String, control As Control) As TabPage
        Dim TabPage As New TabPage With {.Text = text, .Name = name, .Dock = DockStyle.Right,
                                         .Parent = PanelHostTabs, .ControlHost = control}
        AddHandler TabPage.Click, Sub(sender, e)
                                      RaiseEvent TabClick(Me, sender)
                                      For Each item In PanelHostTabs.Controls
                                          If control.Equals(item, sender) Then
                                              PanelHostElementWin.Controls.Clear()
                                              item.ControlHost.Dock = DockStyle.Fill
                                              item.ControlHost.Parent = PanelHostElementWin
                                              item.IsActiveTab = True
                                          Else
                                              item.IsActiveTab = False
                                          End If
                                      Next
 
                                  End Sub
        Return TabPage
    End Function
 
    Public Function AddTab(TabPage As TabPage) As TabPage
        With TabPage
            .Dock = DockStyle.Right
            .Parent = PanelHostTabs
        End With
 
        AddHandler TabPage.Click, Sub(sender, e)
                                      RaiseEvent TabClick(Me, sender)
                                      For Each item In PanelHostTabs.Controls
                                          If Control.Equals(item, sender) Then
                                              PanelHostElement.Controls.Clear()
                                              item.ControlHost.Dock = DockStyle.Fill
                                              item.ControlHost.Parent = PanelHostElementWin
                                              item.IsActiveTab = True
                                          Else
                                              item.IsActiveTab = False
                                          End If
                                      Next
 
                                  End Sub
        Return TabPage
    End Function
 
 
    Public ReadOnly Property TabPages As TabPage()
        Get
            Dim TResult() As TabPage = {}
            If PanelHostTabs.Controls.Count > 0 Then
                For Each item In PanelHostTabs.Controls
                    If TypeOf (item) Is TabPage Then
                        ReDim Preserve TResult(TResult.Length)
                        TResult(TResult.Length - 1) = item
                    End If
                Next
            End If
 
            Return TResult
        End Get
    End Property
 
    Public Class TabPage
        Inherits UserControl
        Private boolIsActive As Boolean = False
        Private MouseType As Integer = -1
        Private ElementHost As Control
        Private SelectClose As Boolean = False
 
        Sub New()
            SetStyle(ControlStyles.AllPaintingInWmPaint Or
                 ControlStyles.OptimizedDoubleBuffer Or
                 ControlStyles.ResizeRedraw Or
                 ControlStyles.UserPaint, True)
        End Sub
 
        Public Property ControlHost As Control
            Get
                Return ElementHost
            End Get
            Set(value As Control)
                ElementHost = value
            End Set
        End Property
 
        Public Overrides Property Text As String
            Get
                Return MyBase.Text
            End Get
            Set(value As String)
                MyBase.Text = value
            End Set
        End Property
 
        Public Property IsActiveTab As Boolean
            Get
                Return boolIsActive
            End Get
            Set(value As Boolean)
                boolIsActive = value
                If boolIsActive Then
                    BackColor = Color.FromArgb(0, 122, 204)
                    ForeColor = Color.White
                Else
                    BackColor = Color.Transparent
                    ForeColor = Color.Black
                    MouseType = -1
                End If
            End Set
        End Property
 
        Private Sub TabPage_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
            If e.Button = Windows.Forms.MouseButtons.Left And SelectClose Then
                ControlHost.Parent = Nothing
                sender.Dispose()
            End If
        End Sub
 
        Private Sub TabPage_MouseEnter(sender As Object, e As EventArgs) Handles Me.MouseEnter
            If Not IsActiveTab Then
                BackColor = Color.FromArgb(28, 151, 234)
                ForeColor = Color.White
                MouseType = 0
                Refresh()
            End If
        End Sub
 
        Private Sub TabPage_MouseLeave(sender As Object, e As EventArgs) Handles Me.MouseLeave
            If Not IsActiveTab Then
                BackColor = Color.Transparent
                ForeColor = Color.Black
                MouseType = -1
                SelectClose = False
                Refresh()
            End If
            SelectClose = False
            Refresh()
        End Sub
 
        Private Sub TabPage_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
            If e.X > sender.Width - 20 Then
                SelectClose = True
                Refresh()
            Else
                SelectClose = False
                Refresh()
            End If
        End Sub
 
        Private Sub TabPage_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
            With e.Graphics
                Dim SFont = .MeasureString(Text, Font).ToSize
                sender.Width = SFont.Width + 30
                .DrawString(Text, Font, New SolidBrush(ForeColor),
                2,
                sender.Height / 2 - SFont.Height / 2)
                If MouseType = 0 Then
                    If SelectClose Then
                        .FillRectangle(New SolidBrush(Color.FromArgb(82, 176, 239)), sender.Width - 19, 3, 16, 16)
                    End If
                    .DrawString("r", New Font("Webdings", 9), Brushes.White, sender.Width - 19, 1)
                End If
            End With
        End Sub
    End Class
End Class
Миниатюры
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)  
Вложения
Тип файла: zip project.zip (13.3 Кб, 183 просмотров)
6
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
14.04.2014, 12:54
Всем привет. Вот сделал свой контрол ButtonChrome.
Миниатюры
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)  
Вложения
Тип файла: zip ButtonChrome.zip (43.9 Кб, 358 просмотров)
15
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
19.04.2014, 12:16
сжимаем файл:

VB.NET
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
 Public Sub СжатьВФайл(файл As String, сжатый_файл As String)
        Dim ФайлИнфо As New IO.FileInfo(файл)
 
        If Not ФайлИнфо.Exists Then Throw New Exception("Не найден файл.")
 
        Using ОткрытыйФайл As IO.FileStream = ФайлИнфо.OpenRead
            Using СжатыйФайл As New IO.FileStream(сжатый_файл, FileMode.Create)
                Using Компрессор As New IO.Compression.DeflateStream(СжатыйФайл, CompressionMode.Compress)
                    ОткрытыйФайл.CopyTo(Компрессор)
                End Using
            End Using
        End Using
    End Sub
 
 
    Public Sub ИзвлечьИзСжатогоФайл(сжатый_файл As String, файл As String)
        Dim ФайлИнфо As New IO.FileInfo(сжатый_файл)
 
        If Not ФайлИнфо.Exists Then Throw New Exception("Не найден файл.")
        Using СжатыйФайл As IO.FileStream = ФайлИнфо.OpenRead
            Using СозданыйФайл As New IO.FileStream(файл, FileMode.Create)
                Using Декомпрессор As New IO.Compression.DeflateStream(СжатыйФайл, CompressionMode.Decompress)
                    Декомпрессор.CopyTo(СозданыйФайл)
                End Using
            End Using
        End Using
    End Sub
3
Заблокирован
23.04.2014, 23:46
Сравнение WebBrowser с WebKitBrowser и эпичный провал последнего!

Начиналось всё достаточно обыденно. Решил написать простой пример проекта с WebKitBrowser, а заодно сравнить последний по производительности со штатным WebBrowser'ом.
Создал проект в Visual Basic .NET Express 2010.
Закинул в папку Debug библиотеки WebKit.NET последней версии 0.5.
На панель элементов добавил элементы из библиотеки WebKitBrowser.dll, которая теперь так же была в Debug.
Ну и написал простенькую программку, которая бы запоминала текущее время с точностью до миллисекунд, отправляла по ссылке WebBrowser или WebKitBrowser, и после окончания загрузки (в событии DocumentCompleted) вычитала сохранённое значение из текущего времени и выводила разницу в миллисекундах в MessageBox.
Ссылку взял не куда-нибудь, а прямо на данную тему - заодно посещаемость накрутим, и нуждающимся будет легче найти наши исходники в поисковиках.

Сперва попробовал WebBrowser.
Всё как обычно, по-ослиному. Выскакивает MessageBox, в нём ~8000 мсек, и через некоторое время ещё MessageBox, в котором ~14000 мсек - несмотря на дополнительную проверку, точно ли страница загружена полностью, с помощью ReadyState.

Потом взялся за WebKitBrowser. И тут...
Окно зависает, с кнопкой "Тест WebKitBrowser" в нажатом состоянии. Через пару секунд кнопку отпускает. Ждём... Ждём... Ждём... Наконец выскакивает что-то вроде 60000 мсек. И самое главное - страница почти пуста!!! Проходит ещё немного времени. Становится лучше. Ещё лучше. Но CSS-стили, несмотря на длительное ожидание, всё равно остаются незагруженными!!!

Перезапускаем программу, убираем WebBrowser - то же самое! Пробуем официальный пример WebKitBrowserTest.exe - опять!!!
И самое неприятное - с каким-нибудь mail.ru или google.ru - всё вроде в порядке!

...Стоит ли пользоваться WebKitBrowser'ом при разработке не-узкоспециальных проектов, и стоит ли считать ненужным велосипедом попытку какого-нибудь, пусть даже школьника, написать наконец нормальный движок за неимением таковых в наличии, решайте сами.

...как и попытку создать форум, на который можно загружать zip-архивы с исходниками размером 13.2 МБ!
http://yadi.sk/d/P_zar3L3N6wAT
3
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
25.04.2014, 16:24
Узнаем информацию о файле при помощи shell32.dll

Добавляем в проект ссылку shell32.dll (Кто не знает где этот файл находится то вот "C:\Windows\System32\shell32.dll").

И так возьмем какой нибудь файл, например файл MP3 и вставляем этот код (на форме должно быть 2 объекта это: Button1 и ListBox1)
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim FileSelected As New IO.FileInfo(ФАЙЛ_MP3)
        Dim shell As New Shell32.Shell
        Dim folder = shell.NameSpace(FileSelected.DirectoryName)
        Dim folderItem = folder.ParseName(FileSelected.Name)
        With folder
            For n = 0 To 60
 
                If Not .GetDetailsOf(folderItem, n) = String.Empty Then
                    ListBox1.Items.Add("Column #" & n & " - " & .GetDetailsOf(folderItem, n))
                End If
 
            Next
 
        End With
    End Sub
End Class
7
 Аватар для Pe4eNEG
123 / 123 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
26.04.2014, 12:54
XML-комментирование кода

Мало кто знает, или знает, но не пользуется В Visual Studio есть возможность XML комментирования кода. Что же это такое.
В любом более менее серьезном проекте со временем накапливается такая куча процедур и функций, название которых перестает полностью раскрывать суть того, что мы получим при их выполнении. Скакать по нескольким тысячам строчек кода занятие малоприятное и совсем не способствующее скорости написания кода. Тут нам на помощь приходить XML комментирование кода. Для того чтобы создать XML комментарий к выбранной процедуре просто добавть перед ее названием три символа апострофа:
'''
Ниже пример того что вы получите:
Было
VB.NET
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
   
    Shared Function Account_UpdateInfo(ByVal _UserId As Integer, ByVal _ulogin As String, ByVal _fname As String, ByVal _lname As String, ByVal _mname As String, ByVal _utype As Integer, ByVal _Isactive As Boolean, ByVal _pphone As Object, ByVal _wphone As Object, ByVal _addr As String, ByVal _other As Object) As Boolean
 
        Dim _command As New MySqlCommand
        With _command.Parameters
            .AddWithValue("@id", _UserId)
            .AddWithValue("@ulogin", _ulogin.ToLower)
            .AddWithValue("@fname", _fname)
            .AddWithValue("@lname", _lname)
            .AddWithValue("@mname", _mname)
            .AddWithValue("@utype", _utype)
            .AddWithValue("@isactive", _Isactive)
            .AddWithValue("@pphone", GetStringOrNULL(_pphone))
            .AddWithValue("@wphone", GetStringOrNULL(_wphone))
            .AddWithValue("@aud", GetStringOrNULL(_addr))
            .AddWithValue("@other", GetStringOrNULL(_other))
        End With
        _command.Connection = _Connect
        _command.CommandText = "UPDATE [task_users] SET [ulogin] = @ulogin, [fname] = @fname, [lname] = @lname, [mname] = @mname, [utype]=@utype, [isactive]=@isactive, [pphone]=@pphone, [wphone]=@wphone, [aud]=@aud, [other]=@other WHERE [id]=@id"
        Try
            If _Connect.State = ConnectionState.Closed Then
                _Connect.Open()
            End If
            _command.ExecuteNonQuery()
            _Connect.Close()
            Return True
        Catch e1 As MySqlException
            WriteErrorLog("Процедура обновления данных пользователя (Account_UpdateInfo)", e1.Message)
            Return False
        Catch e2 As Exception
            WriteErrorLog("Процедура обновления данных пользователя (Account_UpdateInfo)", e2.Message)
            Return False
        End Try
    End Function

Стало
VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 ''' <summary>
    ''' Процедура обновления данных пользователя
    ''' </summary>
    ''' <param name="_UserId">Айди пользователя</param>
    ''' <param name="_ulogin">Логин в нижнем регистре</param>
    ''' <param name="_fname">Имя</param>
    ''' <param name="_lname">Фамилия</param>
    ''' <param name="_mname">Отчество</param>
    ''' <param name="_utype">тип учетной записи 0 - viewonly, 1 - User, 2 - Admin</param>
    ''' <param name="_Isactive">0 отключен, 1 включен</param>
    ''' <param name="_pphone">Личный телефон</param>
    ''' <param name="_wphone">Рабочий телефон</param>
    ''' <param name="_addr">Аудитория</param>
    ''' <param name="_other">Другое</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Shared Function Account_UpdateInfo(ByVal _UserId As Integer, ByVal _ulogin As String, ByVal _fname As String, ByVal _lname As String, ByVal _mname As String, ByVal _utype As Integer, ByVal _Isactive As Boolean, ByVal _pphone As Object, ByVal _wphone As Object, ByVal _addr As String, ByVal _other As Object) As Boolean
 
        Dim _command As New MySqlCommand
        With _command.Parameters
            .AddWithValue("@id", _UserId)
            .AddWithValue("@ulogin", _ulogin.ToLower)
            .AddWithValue("@fname", _fname)
            .AddWithValue("@lname", _lname)
            .AddWithValue("@mname", _mname)
            .AddWithValue("@utype", _utype)
            .AddWithValue("@isactive", _Isactive)
            .AddWithValue("@pphone", GetStringOrNULL(_pphone))
            .AddWithValue("@wphone", GetStringOrNULL(_wphone))
            .AddWithValue("@aud", GetStringOrNULL(_addr))
            .AddWithValue("@other", GetStringOrNULL(_other))
        End With
        _command.Connection = _Connect
        _command.CommandText = "UPDATE [task_users] SET [ulogin] = @ulogin, [fname] = @fname, [lname] = @lname, [mname] = @mname, [utype]=@utype, [isactive]=@isactive, [pphone]=@pphone, [wphone]=@wphone, [aud]=@aud, [other]=@other WHERE [id]=@id"
        Try
            If _Connect.State = ConnectionState.Closed Then
                _Connect.Open()
            End If
            _command.ExecuteNonQuery()
            _Connect.Close()
            Return True
        Catch e1 As MySqlException
            WriteErrorLog("Процедура обновления данных пользователя (Account_UpdateInfo)", e1.Message)
            Return False
        Catch e2 As Exception
            WriteErrorLog("Процедура обновления данных пользователя (Account_UpdateInfo)", e2.Message)
            Return False
        End Try
    End Function


Этот способ удобен тем, что теперь при вызове Процедуры\Функции IntelliSense будет выдавать нам те комментарии которые мы указали для этой процедуры. Теперь мы не забудем зачем нам передавать в в эту функцию такую то переменную и что мы получим на выходе.
Пример выдачи IntelliSense
14
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
27.04.2014, 03:46
простятский код для перевода размера файла в текст, т.е переводим 4174785 в 3,98 МБайт.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function GetLengthFileToString(length As Long, digits As Integer) As String
        Dim Result As String = "0 Байт"
        If length <= 1024 Then
            Result = String.Format("{0} Байт", length)
        ElseIf length > 1024 And length <= 1024 ^ 2 Then
            Result = String.Format("{0} КБайт", Math.Round(length / 1024, digits))
        ElseIf length > 1024 ^ 2 And length <= 1024 ^ 3 Then
            Result = String.Format("{0} МБайт", Math.Round(length / 1024 ^ 2, digits))
        ElseIf length > 1024 ^ 3 And length <= 1024 ^ 4 Then
            Result = String.Format("{0} ГБайт", Math.Round(length / 1024 ^ 3, digits))
        ElseIf length > 1024 ^ 4 And length <= 1024 ^ 5 Then
            Result = String.Format("{0} ТБайт", Math.Round(length / 1024 ^ 3, digits))
        End If
        Return Result
    End Function
6
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
27.04.2014, 11:05
Cохранияем всё что нарисовали в событие Paint (Graphics):

Функция:
VB.NET
1
2
3
4
5
6
7
    Public Function SavePaintToImage(element As Control) As Image
        Dim ImageBitmap As New Bitmap(element.ClientSize.Width, element.ClientSize.Height)
        Using Graph As Graphics = Graphics.FromImage(ImageBitmap)
            InvokePaint(element, New PaintEventArgs(Graph, element.ClientRectangle))
        End Using
        Return ImageBitmap
    End Function
Пример:
VB.NET
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
36
37
38
Public Class Form1
 
    Public Function SavePaintToImage(element As Control) As Image
        Dim ImageBitmap As New Bitmap(element.ClientSize.Width, element.ClientSize.Height)
        Using Graph As Graphics = Graphics.FromImage(ImageBitmap)
            InvokePaint(element, New PaintEventArgs(Graph, element.ClientRectangle))
        End Using
        Return ImageBitmap
    End Function
 
    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        With e.Graphics
            .SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
            .DrawLine(Pens.Black, 25, 25, 100, 100)
            .DrawRectangle(Pens.Black, New Rectangle(10, 10, 15, 15))
            .DrawRectangle(Pens.Black, New Rectangle(100, 100, 100, 100))
            Dim brushGradient As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, 100, 100), Color.Black, Color.White, 90)
            .FillRectangle(brushGradient, 100, 100, 100, 100)
            For n = 1 To 50
                .DrawRectangle(Pens.Black, New Rectangle(New Point(2 * n, 2 * n), New Size(Me.Width - (2 * n), Me.Height - (2 * n))))
            Next
        End With
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim SFDialog As New SaveFileDialog
        SFDialog.Filter = "PNG (*.png)|*.png"
        If SFDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
            SavePaintToImage(Me).Save(SFDialog.FileName)
            Process.Start(SFDialog.FileName)
        End If
    End Sub
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ResizeRedraw = True
        DoubleBuffered = True
    End Sub
End Class
Миниатюры
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)  
6
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
28.04.2014, 12:26
Отслеживаем запуск и закрытие приложений без обновления списка ListBox.

И так добавляем на форму объект ListBox и переименовываем его в ListBoxProccess.
Потом добавляем Timer и ставим для него свойство Enabled = True.

Добавляем в проект новый файл Class с именем ProcessItem и в него вставляем код:
Кликните здесь для просмотра всего текста
VB.NET
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
Public Class ProcessItem
    Private _id As Integer
    Private _title As String
 
    Sub New(id As Integer, title As String)
        _id = id
        _title = title
    End Sub
 
    Public ReadOnly Property ID As Integer
        Get
            Return _id
        End Get
    End Property
 
    Public ReadOnly Property Title As String
        Get
            Return _title
        End Get
    End Property
 
    Public Overrides Function ToString() As String
        Return _title
    End Function
End Class


а в Form1 вставляем:
Кликните здесь для просмотра всего текста
VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Public Class Form1
 
    Private ListProcesses As New Dictionary(Of ProcessItem, String)
 
    Private Sub MainWindow_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For Each p In Process.GetProcesses
            Try
                If Not p.MainWindowTitle = String.Empty Then
                    ListProcesses.Add(New ProcessItem(p.Id, p.MainWindowTitle), p.Modules(0).FileName)
                End If
            Catch ex As Exception
 
            End Try
        Next
    End Sub
 
 
    Private Sub TimerScan_Tick(sender As Object, e As EventArgs) Handles TimerScan.Tick
        'отображаем список запущенных процессов
        For Each p In ListProcesses
            Try
                With Process.GetProcessById(p.Key.ID)
                    If Not .MainWindowTitle = String.Empty Then
                        If Not ListBoxProccess.Items.Contains(.MainWindowTitle) Then
                            ListBoxProccess.Items.Add(.MainWindowTitle)
                        End If
                    End If
                End With
            Catch ex As Exception
                ListProcesses.Remove(p.Key)
 
                ListBoxProccess.Items.Remove(p.Key.Title)
                Exit For
            End Try
        Next
 
        For Each p In Process.GetProcesses
            Try
                If Not p.MainWindowTitle = String.Empty Then
                    If Not ListProcesses.ContainsValue(p.Modules(0).FileName) Then
                        ListProcesses.Add(New ProcessItem(p.Id, p.MainWindowTitle), p.Modules(0).FileName)
                    End If
                End If
 
            Catch ex As Exception
 
            End Try
        Next
    End Sub
End Class


и вот что должно получится:
Миниатюры
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)  
4
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
01.05.2014, 05:39
API функции. Показать или скрыть консоль.

Показать.
VB.NET
1
Declare Function AllocConsole Lib "Kernel32.dll" () As Boolean
Скрыть.
VB.NET
1
Declare Function FreeConsole Lib "Kernel32.dll" () As Boolean
3
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
02.05.2014, 13:31
двигаем форму при зажатие левой кнопки мыши.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Imports System.Runtime.InteropServices
 
Public Class Form1
    Public Const WM_NCLBUTTONDOWN As Integer = &HA1
    Public Const HT_CAPTION As Integer = &H2
 
    <DllImportAttribute("user32.dll")> _
    Public Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As Integer, lParam As Integer) As Integer
    End Function
 
    <DllImportAttribute("user32.dll")> _
    Public Shared Function ReleaseCapture() As Boolean
    End Function
 
 
    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            ReleaseCapture()
            SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0)
        End If
    End Sub
End Class
Добавлено через 43 минуты
Вот набросал два кода для удобной работы с TCP протоколом

Что имеется в классе Server:
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Event ConnectionRequest(ByVal sender As Object, ByVal e As ConnectionRequestEventArgs)
    Event DataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    Event Connected(ByVal sender As Object, ByVal e As ConnectedEventArgs)
    Event StartListener(ByVal sender As Object, ByVal e As EventArgs)
    Event EndListener(ByVal sender As Object, ByVal e As EventArgs)
    Event Disconnected(ByVal sender As Object, ByVal e As DisconnectedEventArgs)
    Event SendCompleted(ByVal sender As Object, ByVal e As EventArgs)
    Event SendAllCompleted(ByVal sender As Object, ByVal e As EventArgs)
    Event SendFileCompleted(ByVal sender As Object, ByVal e As EventArgs)
 
Public Property BufferReceive() As Long
Public ReadOnly Property IsStart() As Boolean
Public ReadOnly Property Users() As List(Of Net.Sockets.Socket)
Public Sub Start(ByVal address As Net.IPAddress, ByVal port As Integer)
Public Sub Start(ByVal address As String, ByVal port As Integer)
Public Sub [Stop]()
Public Sub KickAll()
Public Sub Kick(ByVal socket As Net.Sockets.Socket)
Public Sub Kick(ByVal address As String, ByVal port As String)
Public Sub Send(ByVal buffer() As Byte, ByVal socket As Net.Sockets.Socket)
Public Sub SendAll(ByVal buffer() As Byte)
Public Sub SendFile(ByVal fileName As String, ByVal socket As Net.Sockets.Socket)
 Public Sub SendFile(ByVal fileName As String, ByVal preBuffer() As Byte, ByVal postBuffer() As Byte, ByVal flags As Net.Sockets.TransmitFileOptions, ByVal socket As Net.Sockets.Socket)

VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
Public Class Server
    Event ConnectionRequest(ByVal sender As Object, ByVal e As ConnectionRequestEventArgs)
    Event DataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    Event Connected(ByVal sender As Object, ByVal e As ConnectedEventArgs)
    Event StartListener(ByVal sender As Object, ByVal e As EventArgs)
    Event EndListener(ByVal sender As Object, ByVal e As EventArgs)
    Event Disconnected(ByVal sender As Object, ByVal e As DisconnectedEventArgs)
    Event SendCompleted(ByVal sender As Object, ByVal e As EventArgs)
    Event SendAllCompleted(ByVal sender As Object, ByVal e As EventArgs)
    Event SendFileCompleted(ByVal sender As Object, ByVal e As EventArgs)
 
    Private TcpListener As Net.Sockets.TcpListener
    Private CurrentEvent As Threading.SynchronizationContext
    Private TListConnected As New List(Of Net.Sockets.Socket)
    Private boolIsStart As Boolean = False
    Private longBufferReceive As Long = 1024
 
    Sub New()
        CurrentEvent = Threading.SynchronizationContext.Current
    End Sub
 
    Public Function GetTcpListener() As Net.Sockets.TcpListener
        Return TcpListener
    End Function
 
    Public Property BufferReceive() As Long
        Get
            Return longBufferReceive
        End Get
        Set(ByVal value As Long)
            longBufferReceive = value
        End Set
    End Property
 
    Public ReadOnly Property IsStart() As Boolean
        Get
            Return boolIsStart
        End Get
    End Property
 
    Public ReadOnly Property Users() As List(Of Net.Sockets.Socket)
        Get
            Return TListConnected
        End Get
    End Property
 
    Public Sub Start(ByVal address As Net.IPAddress, ByVal port As Integer)
        If TcpListener Is Nothing And Not boolIsStart Then
            Dim ThreadStartListener As New Threading.Thread(AddressOf EventStartListener)
            ThreadStartListener.IsBackground = True
            ThreadStartListener.Start(New Object() {address, port})
            boolIsStart = True
        End If
    End Sub
 
    Public Sub Start(ByVal address As String, ByVal port As Integer)
        If TcpListener Is Nothing And Not boolIsStart Then
            Dim ThreadStartListener As New Threading.Thread(AddressOf EventStartListener)
            ThreadStartListener.IsBackground = True
            ThreadStartListener.Start(New Object() {Net.IPAddress.Parse(address), port})
            boolIsStart = True
        End If
    End Sub
 
    Public Sub [Stop]()
        If Not TcpListener Is Nothing And boolIsStart Then
            TcpListener.Stop()
            TcpListener = Nothing
            boolIsStart = False
        End If
    End Sub
 
    Private Sub EndListener_Post()
        RaiseEvent EndListener(Me, New EventArgs)
    End Sub
 
    Private Sub StartListener_Post()
        RaiseEvent StartListener(Me, New EventArgs)
    End Sub
 
    Private Sub EventStartListener(ByVal e As Object)
        Dim Address As Net.IPAddress = CType(e(0), Net.IPAddress)
        Dim Port As Integer = CType(e(1), Integer)
        TcpListener = New Net.Sockets.TcpListener(Address, Port)
        Try
            TcpListener.Start()
            CurrentEvent.Post(AddressOf StartListener_Post, Nothing)
            While True
                Dim CurrentClient As Net.Sockets.Socket = TcpListener.AcceptSocket
                Dim RequestEventArgs As New ConnectionRequestEventArgs(CurrentClient.RemoteEndPoint)
                RaiseEvent ConnectionRequest(Me, RequestEventArgs)
                If RequestEventArgs.Allow Then
                    Dim ThreadConnected As New Threading.Thread(AddressOf EventClientConnected)
                    ThreadConnected.IsBackground = True
                    ThreadConnected.Start(CurrentClient)
 
                    TListConnected.Add(CurrentClient)
                Else
                    CurrentClient.Close()
                End If
            End While
            TcpListener.Stop()
        Catch ex As Exception
 
        Finally
            CurrentEvent.Post(AddressOf EndListener_Post, Nothing)
        End Try
    End Sub
 
    Private Sub Connected_Post(ByVal e As Object)
        RaiseEvent Connected(Me, e(0))
    End Sub
 
    Private Sub DataReceived_Post(ByVal e As Object)
        RaiseEvent DataReceived(Me, e(0))
    End Sub
 
    Private Sub Disconnected_Post(ByVal e As Object)
        RaiseEvent Disconnected(Me, e(0))
    End Sub
 
    Private Sub EventClientConnected(ByVal e As Object)
        Dim CurrentClient As Net.Sockets.Socket = CType(e, Net.Sockets.Socket)
        Dim endPoint As Net.EndPoint = CurrentClient.RemoteEndPoint
        Dim byteBuffer(longBufferReceive - 1) As Byte
        Dim byteReceived As Long = 0
        CurrentEvent.Post(AddressOf Connected_Post, New Object() {New ConnectedEventArgs(CurrentClient)})
        While CurrentClient.Connected
            Try
                byteReceived = CurrentClient.Receive(byteBuffer)
                If byteReceived = 0 Then
                    TListConnected.Remove(CurrentClient)
                    CurrentClient.Close()
                Else
                    Dim DataReceivedArgs As New DataReceivedEventArgs(byteBuffer, CurrentClient)
                    CurrentEvent.Post(AddressOf DataReceived_Post, New Object() {DataReceivedArgs})
                End If
            Catch ex As Exception
 
            End Try
        End While
        CurrentEvent.Post(AddressOf Disconnected_Post, New Object() {New DisconnectedEventArgs(endPoint)})
    End Sub
 
    Public Sub KickAll()
        If boolIsStart Then
            For Each user As Net.Sockets.Socket In TListConnected
                user.Close()
            Next
        End If
    End Sub
 
    Public Sub Kick(ByVal socket As Net.Sockets.Socket)
        If boolIsStart Then
            socket.Close()
        End If
    End Sub
 
    Public Sub Kick(ByVal address As String, ByVal port As String)
        For Each user As Net.Sockets.Socket In TListConnected
            If user.RemoteEndPoint.ToString = address & ":" & port Then
                user.Close()
                Exit For
            End If
        Next
    End Sub
 
    Public Class DisconnectedEventArgs
        Inherits EventArgs
        Private ePoint As Net.EndPoint
        Sub New(ByVal endPoint As Net.EndPoint)
            ePoint = endPoint
        End Sub
        Public ReadOnly Property RemoteEndPoint() As Net.EndPoint
            Get
                Return ePoint
            End Get
        End Property
    End Class
 
    Public Class DataReceivedEventArgs
        Inherits EventArgs
        Private byteBuffer() As Byte
        Private sockClient As Net.Sockets.Socket
        Sub New(ByVal buffer() As Byte, ByVal socket As Net.Sockets.Socket)
            byteBuffer = buffer
            sockClient = socket
        End Sub
        Public ReadOnly Property Buffer() As Byte()
            Get
                Return byteBuffer
            End Get
        End Property
 
        Public ReadOnly Property SocketClient() As Net.Sockets.Socket
            Get
                Return sockClient
            End Get
        End Property
    End Class
 
    Public Class ConnectedEventArgs
        Inherits EventArgs
        Private sockEnd As Net.Sockets.Socket
        Sub New(ByVal socket As Net.Sockets.Socket)
            sockEnd = socket
        End Sub
        Public ReadOnly Property ClientSocket() As Net.Sockets.Socket
            Get
                Return sockEnd
            End Get
        End Property
    End Class
 
    Public Class ConnectionRequestEventArgs
        Inherits EventArgs
        Private boolAllow As Boolean = True
        Private ePoint As Net.EndPoint
        Sub New(ByVal endPoint As Net.EndPoint)
            ePoint = endPoint
        End Sub
        Public Property Allow() As Boolean
            Get
                Return boolAllow
            End Get
            Set(ByVal value As Boolean)
                boolAllow = value
            End Set
        End Property
 
        Public ReadOnly Property RemoteEndPoint() As Net.EndPoint
            Get
                Return ePoint
            End Get
        End Property
    End Class
 
    Public Sub Send(ByVal buffer() As Byte, ByVal socket As Net.Sockets.Socket)
        If boolIsStart Then
            socket.Send(buffer)
            RaiseEvent SendCompleted(Me, New EventArgs)
        End If
    End Sub
 
    Public Sub SendAll(ByVal buffer() As Byte)
        If boolIsStart Then
            For Each item As Net.Sockets.Socket In TListConnected
                item.Send(buffer)
            Next
            RaiseEvent SendAllCompleted(Me, New EventArgs)
        End If
    End Sub
 
    Public Sub SendFile(ByVal fileName As String, ByVal socket As Net.Sockets.Socket)
        If boolIsStart Then
            socket.SendFile(fileName)
            RaiseEvent SendFileCompleted(Me, New EventArgs)
        End If
    End Sub
 
    Public Sub SendFile(ByVal fileName As String, ByVal preBuffer() As Byte, ByVal postBuffer() As Byte, ByVal flags As Net.Sockets.TransmitFileOptions, ByVal socket As Net.Sockets.Socket)
        If boolIsStart Then
            socket.SendFile(fileName, preBuffer, postBuffer, flags)
            RaiseEvent SendFileCompleted(Me, New EventArgs)
        End If
    End Sub
 
End Class
Что имеется в классе Client:
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
Event Connected(ByVal sender As Object, ByVal e As ConnectedEventArgs)
    Event DataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    Event Disconnected(ByVal sender As Object, ByVal e As DisconnectedEventArgs)
    Event SendCompleted(ByVal sender As Object, ByVal e As EventArgs)
    Event SendFileCompleted(ByVal sender As Object, ByVal e As EventArgs)
 
Public Function GetTcpClient() As Net.Sockets.TcpClient
Public Sub Send(ByVal buffer() As Byte)
Public Sub SendFile(ByVal fileName As String)
Public Property BufferReceive() As Long
Public ReadOnly Property IsConnected() As Boolean
Public Sub Disconnect()
Public Function Connect(ByVal address As String, ByVal port As Integer) As Boolean

VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
Public Class Client
    Event Connected(ByVal sender As Object, ByVal e As ConnectedEventArgs)
    Event DataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    Event Disconnected(ByVal sender As Object, ByVal e As DisconnectedEventArgs)
    Event SendCompleted(ByVal sender As Object, ByVal e As EventArgs)
    Event SendFileCompleted(ByVal sender As Object, ByVal e As EventArgs)
 
 
    Private TcpClient As Net.Sockets.TcpClient
    Private Current As Threading.SynchronizationContext
    Private longBufferReceive As Long = 1024
 
    Sub New()
        Current = Threading.SynchronizationContext.Current
    End Sub
 
    Public Function GetTcpClient() As Net.Sockets.TcpClient
        Return TcpClient
    End Function
 
    Public Sub Send(ByVal buffer() As Byte)
        If Not TcpClient Is Nothing And IsConnected Then
            TcpClient.Client.Send(buffer)
            RaiseEvent SendCompleted(Me, New EventArgs)
        End If
    End Sub
 
 
    Public Sub SendFile(ByVal fileName As String)
        If Not TcpClient Is Nothing And IsConnected Then
            TcpClient.Client.SendFile(fileName)
            RaiseEvent SendFileCompleted(Me, New EventArgs)
        End If
    End Sub
 
    Public Property BufferReceive() As Long
        Get
            Return longBufferReceive
        End Get
        Set(ByVal value As Long)
            longBufferReceive = value
        End Set
    End Property
 
    Public ReadOnly Property IsConnected() As Boolean
        Get
            If TcpClient Is Nothing Then
                Return False
            Else
                Return TcpClient.Connected
            End If
        End Get
    End Property
 
    Public Sub Disconnect()
        If Not TcpClient Is Nothing Then
            If TcpClient.Connected Then
                TcpClient.Close()
                TcpClient = Nothing
            End If
        End If
    End Sub
 
    Public Function Connect(ByVal address As String, ByVal port As Integer) As Boolean
        Try
            If Not IsConnected And TcpClient Is Nothing Then
                TcpClient = New Net.Sockets.TcpClient
                TcpClient.Connect(address, port)
 
                Dim ThreadEventStartListener As New Threading.Thread(AddressOf EventStartListener) With {.IsBackground = True}
                ThreadEventStartListener.Start(TcpClient.Client)
                Return True
            Else
                Return False
            End If
        Catch ex As Exception
            Return False
        End Try
    End Function
 
    Private Sub Connected_Post(ByVal e As Object)
        RaiseEvent Connected(Me, New ConnectedEventArgs(e(0)))
    End Sub
 
    Private Sub DataReceived_Post(ByVal e As Object)
        RaiseEvent DataReceived(Me, e(0))
    End Sub
 
    Private Sub Disconnected_Post(ByVal e As Object)
        RaiseEvent Disconnected(Me, e(0))
    End Sub
 
    Private Sub EventStartListener(ByVal e As Object)
        Dim CurrentClient As Net.Sockets.Socket = CType(e, Net.Sockets.Socket)
        Dim endPoint As Net.EndPoint = CurrentClient.RemoteEndPoint
        Dim byteBuffer(longBufferReceive - 1) As Byte
        Dim byteReceived As Long = 0
        Current.Post(AddressOf Connected_Post, New Object() {CurrentClient})
        While CurrentClient.Connected
            Try
                byteReceived = CurrentClient.Receive(byteBuffer)
                If byteReceived > 0 Then
                    Current.Post(AddressOf DataReceived_Post, New Object() {New DataReceivedEventArgs(byteBuffer, CurrentClient.RemoteEndPoint)})
                End If
            Catch ex As Exception
 
            End Try
        End While
        CurrentClient.Close()
        Current.Post(AddressOf Disconnected_Post, New Object() {New DisconnectedEventArgs(endPoint)})
    End Sub
 
    Public Class DataReceivedEventArgs
        Inherits EventArgs
        Private byteBuffer() As Byte
        Private endPoint As Net.EndPoint
 
        Sub New(ByVal buffer() As Byte, ByVal ePoint As Net.EndPoint)
            byteBuffer = buffer
            endPoint = ePoint
        End Sub
 
        Public ReadOnly Property Buffer() As Byte()
            Get
                Return byteBuffer
            End Get
        End Property
 
        Public ReadOnly Property RemoteEndPoint() As Net.EndPoint
            Get
                Return endPoint
            End Get
        End Property
    End Class
 
    Public Class DisconnectedEventArgs
        Inherits EventArgs
        Private endPoint As Net.EndPoint
        Sub New(ByVal ePoint As Net.EndPoint)
            endPoint = ePoint
        End Sub
        Public ReadOnly Property RemoteEndPoint() As Net.EndPoint
            Get
                Return endPoint
            End Get
        End Property
    End Class
 
    Public Class ConnectedEventArgs
        Inherits EventArgs
        Private sockEnd As Net.Sockets.Socket
        Sub New(ByVal socket As Net.Sockets.Socket)
            sockEnd = socket
        End Sub
 
        Public ReadOnly Property SocketClient() As Net.Sockets.Socket
            Get
                Return sockEnd
            End Get
        End Property
    End Class
End Class
3
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
05.05.2014, 17:04
и так, создал компонент интеграции буфера обмена (только текста).
Event args:
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Class ReceivedClipboardFiledEventArgs
    Private _exception As Exception
    Sub New(ex As Exception)
        _exception = ex
    End Sub
    ''' <summary>
    ''' Получает текущую ошибку
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property Exception As Exception
        Get
            Return _exception
        End Get
    End Property
End Class

Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Class ReceivedClipboardTextEventArgs
    Private _text As String = String.Empty
    Sub New(t As String)
        _text = t
    End Sub
    ''' <summary>
    ''' Получает новый текст с буфера обмена.
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property Text As String
        Get
            Return _text
        End Get
    End Property
End Class

Сам компонент:
Кликните здесь для просмотра всего текста
VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Imports System.ComponentModel
 
Public Class IntegrationClipboard
    Inherits Component
    Event ReceivedClipboardText(sender As Object, e As ReceivedClipboardTextEventArgs)
    Event ReceivedClipboardFiled(sender As Object, e As ReceivedClipboardFiledEventArgs)
    Private _enabled As Boolean = False
    Private _timeout As Integer = 500
    Private _filter As String = "*"
    Private _threadReceived As Threading.Thread
    Private _current As Threading.SynchronizationContext
    Sub New()
        _current = Threading.SynchronizationContext.Current
    End Sub
    ''' <summary>
    ''' Получает или указывает запущена ли интеграция буфера обмена.
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <DefaultValue(False)> Public Property Enabled As Boolean
        Get
            Return _enabled
        End Get
        Set(value As Boolean)
            _enabled = value
            If _enabled Then
                If _threadReceived Is Nothing Then
                    _threadReceived = New Threading.Thread(AddressOf Event_Received)
                    _threadReceived.IsBackground = True
                    _threadReceived.SetApartmentState(Threading.ApartmentState.STA)
                    _threadReceived.Start()
                End If
            End If
        End Set
    End Property
    ''' <summary>
    ''' Получает или указывает время ожидания буфера обмена.
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <DefaultValue(500)> Public Property Timeout As Integer
        Get
            Return _timeout
        End Get
        Set(value As Integer)
            _timeout = value
        End Set
    End Property
    ''' <summary>
    ''' Получает или указывает фильтр текста.
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <DefaultValue("*")> Public Property Filter As String
        Get
            Return _filter
        End Get
        Set(value As String)
            _filter = value
        End Set
    End Property
    Private Sub Event_Received()
        Dim r_Text As String = String.Empty
        Dim s_Text As String = String.Empty
        If Clipboard.ContainsText Then
            r_Text = Clipboard.GetText
        End If
        While _enabled
            If Clipboard.ContainsText Then
                s_Text = Clipboard.GetText
                If Not r_Text = s_Text Then
                    r_Text = s_Text
                    Try
                        Dim m_Filters() As String = Split(_filter, "|")
                        For Each f In m_Filters
                            If s_Text Like f Then
                                _current.Post(AddressOf post_ReceivedClipboardText, s_Text)
                                Exit For
                            End If
                        Next
                    Catch ex As Exception
                        _current.Post(AddressOf post_ReceivedClipboardFiled, ex)
                    End Try
                End If
            End If
            Threading.Thread.Sleep(_timeout)
        End While
    End Sub
    Private Sub post_ReceivedClipboardFiled(e As Object)
        RaiseEvent ReceivedClipboardFiled(Me, New ReceivedClipboardFiledEventArgs(e))
    End Sub
    Private Sub post_ReceivedClipboardText(e As Object)
        RaiseEvent ReceivedClipboardText(Me, New ReceivedClipboardTextEventArgs(e))
    End Sub
End Class
2
Заблокирован
12.05.2014, 19:32
Движок Awesomium: ещё одна альтернатива WebBrowser
или Как на VB.NET написать свой аналог хромиума

Вот здесь я на примере WebKit.NET показал, какими движками не следует пытаться заменить стандартный IE (WebBrowser+MSHTML) в приложениях на VB.NET.
В этом же посте рассказывается, какие же движки использовать вместо стандартного IE следует, и почему на к таким движкам можно отнести Awesomium.NET.

По правде говоря, Awesomium.NET тоже не находка. И у него есть несколько весомых недостатков и глюков
Но, во-первых, часть из них поддаётся исправлению, поскольку в Awesomium.NET, помимо готового контрола для отображения страниц (WebControl) реализован более низкоуровневый доступ к ядру движка, помимо прочего, дающий возможность написать свой контрол, уже без глюков.
Во-вторых, у Awesomium есть много больших плюсов, которые в отдельных задачах могут перекрыть минусы.
В-третьих, Awesomium просто популярен. Высока вероятность, что Вам по долгу службы придётся применить в проекте именно Awesomium - и тогда этот пост сможет Вам помочь.
В-четвёртых, если у Вас возникнет желание написать свой движок с блэкджеком и *****, то Вас не смогут отговорить, сказав, что, мол, уже есть шикарный Awesomium и ничего новое не нужно - и, возможно, Вы напишете движок.

Теперь по порядку.

Чем хорош Awesomium.NET?
1. Имеются контролы под Winforms, WPF и Mono.
2. Как уже сказано выше, имеется доступ к .NET-оболочке движка (ядру - WebCore), дающей возможность самому написать контролы под разные платформы - и просто узко-специализированные модификации контролов.
3. Поддерживается юзерскрипт (скрипт, вызывающийся на всех страницах). Это к тому же ядру.
4. Асинхронные загрузка и обновление страниц. То есть, параллельно загрузке страницы в контроле, может выполняться любая другая операция, начиная от перетаскивания формы с контролом мышкой и кончая загрузкой ещё одной страницы. Это не только удобство для пользователя, но и возможность сделать многовкладочный браузер или рекламную вставку в окно, без лишних наворотов.
5. Более корректное отображение страниц, по сравнению с WebKit.
Некорректность в том, что если страница имеет англоязычную версию, то отображается англоязычная, независимо от ОС.
Но, во-первых, это можно исправить, написав свой контрол на основе ядра (чем я, возможно, со временем займусь), а во-вторых, это не столь критично, как неотображение части страницы вообще (WebKit).
6. Наличие в комплекте контрола AddressBox (не для WPF).
Контрол представляет собой обычный текстбокс, но при нажатии Enter переходящий по введённой ссылке. Если ссылка введена неверно (скажем, без http://), то эта ошибка исправляется. Мелочь, а приятно.
7. При желании можно найти и ещё.

Чем плох Awesomium.NET?
1. Самый жирный минус описан чуть выше в пункте 4.
2. Нельзя получить HTML-код текущей страницы в полном объёме, если он превышает некий предел. Попробуйте получить код главной страницы mail.ru
Неизвестно, лишено ли этого бага ядро, но очевидно, какой-то код можно получить и без браузера вообще.
3. Нет режима визуального редактирования страницы, как в WebBrowser.
Короче, в HTML-редакторах Awesomium можно применять лишь как симулятор хрома для испытаний.
4. Устройство событий, методов, свойств, их наименования сильно отличаются от WebBrowser и WebKitBrowser. Делались по принципу GTK+ или чего-то ещё, далекого от .NET.
5. При желании можно найти и ещё.

Как использовать Awesomium.NET в своём приложении?
1. Создаём обычный проект типа Приложение Winforms/WPF.
2. Кидаем распространяемые библиотеки (скачать) в bin\Debug или bin\Release.
3. ПКМ на Панели элементов - добавляем элементы из библиотеки Awesomium.Windows.Forms.dll.
4. Кидаем на форму WebControl.
5. ВАЖНО! В событии FormClosed завершаем ядро
VB.NET
1
WebCore.Shutdown() 'добавить Imports Awesomium.Core
иначе при закрытии приложения может выдаваться исключение InvalidAsynchronousStateException.
В Winforms точно необходимо, не помешает и в WPF.
Перед Shutdown() форму хорошо бы спрятать за границы экрана - оно займёт некоторое время, на которое она зависнет.
6. Вместе с EXEшником распространяются все распространяемые библиотеки. "Спасибо, кэп" просьба не писать.
Awesomium SDK не нужен, ни для разработки, ни на клиентском компе.

Несколько примеров
1. Awesomium Test. http://yadi.sk/d/FZ-INlUdPxxqe
Минимальное тестовое приложение Winforms. На форме WebControl и AddressBar.
2. Awesomium Test WPF. http://yadi.sk/d/Ig3zvixKPxy9b
Аналогично для WPF, но коль скоро AddressBar в WPF нет, то используется специально оборудованный TextBox.
3. Awesomium WebControl vs WebBrowser. http://yadi.sk/d/yinUf8UAPxyTM
Сравнение с WebBrowser по скорости загрузки страницы. После загрузки выдаётся прошедшее время в мсек.
Заодно показано, как для Awesomium реализовать аналог DocumentCompleted из WebBrowser/WebKitBrowser.
4. Awesomium - Simple Browser. http://yadi.sk/d/27KUIWnRPxyjh
Простой одновкладочный браузер на основе Awesomium.
Помимо кнопок Назад, Далее, Обновить и адресной строки (AddressBar) реализованы опции:
- настройка масштаба страницы
- очистка кэша и куков
- экспорт кода страницы в файл (с глюком №2, конечно)
- экспорт страницы в pdf (без глюков)
- выполнение JS-скриптов с возможностью указать XPath фрейма, где он должен выполниться - если надо выполнить скрипт во фрейме

P.S. Файлы на яндекс.диске, потому что на форум не влезают.
5
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
15.05.2014, 09:48
Элемент GraphicsPanel
Графический элемент отображающий определённый график.
Контрол:
VB.NET
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
36
37
38
Public Class GraphicsPanel
    Inherits UserControl
    Private TPoints(9) As Byte
 
    Public Property CountPoints As Integer
        Get
            Return TPoints.Length
        End Get
        Set(value As Integer)
            ReDim TPoints(value - 1)
        End Set
    End Property
 
    Sub New()
        SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.ResizeRedraw Or ControlStyles.SupportsTransparentBackColor Or ControlStyles.UserPaint, True)
    End Sub
 
    Public Sub AddNextValue(value As Byte)
        If CountPoints < 4 Then Exit Sub
        Dim TBuffer(TPoints.Length - 1) As Byte
        For n = 0 To TPoints.Length - 1
            If Not n - 1 < 0 Then TBuffer(n - 1) = TPoints(n)
        Next : TBuffer(TBuffer.Length - 1) = value
        For i = 0 To TBuffer.Length - 1 : TPoints(i) = TBuffer(i) : Next : MyBase.Refresh()
        GC.Collect()
    End Sub
 
    Private Sub GraphicsPanel_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        If CountPoints < 4 Then Exit Sub
        Dim BufferPoints(TPoints.Length - 1) As Point
        Dim sK As Integer = 1 / TPoints.Length * Width
        For i = 0 To TPoints.Length - 1
            BufferPoints(i) = New Point(i / TPoints.Length * (Width + sK), (Height) - (TPoints(i) / 255 * (Height)))
        Next
        e.Graphics.DrawCurve(Pens.Red, BufferPoints)
    End Sub
End Class
Пример с рандоном (на форме разместить сам элемент и Таймер):
VB.NET
1
2
3
4
5
Public Class Form1
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        GraphicsPanel1.AddNextValue(VBMath.Rnd * 200)
    End Sub
End Class
Миниатюры
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)  
7
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
22.05.2014, 12:04
Работа с массивами.

Меняем тип массива из Integer в String.
VB.NET
1
2
3
4
Dim mInt() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
Dim mString() As String = Array.ConvertAll(mInt, New Converter(Of Integer, String)(Function(i As Integer)
                                                                                   Return i.ToString
                                                                                   End Function))
Меняем размер массива.
VB.NET
1
2
3
Dim m() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
Array.Resize(m, 4)
MsgBox(m.Length)
Находим в массиве значение и сразу же его меняем
VB.NET
1
2
3
4
5
6
7
Dim m() As Integer = {1, 5, 5, 7, 2, 3, 4}
Dim Count As Integer = 0
Array.ForEach(m, New Action(Of Integer)(Sub(val As Integer)
                                        If val = 5 Then m(Count) = 7
                                        Count += 1
                                        End Sub))
'получаем результат массива {1, 7, 7, 7, 2, 3, 4}
Извлекаем часть массива
VB.NET
1
2
3
4
5
6
7
8
9
Dim m() As Integer = {22, 5, 14, 19, 41}
Dim startIndex As Integer = 1
Dim length As Integer = 5
Dim result() As Integer = {}
For index = startIndex - 1 To startIndex + length - 2
ReDim Preserve result(result.Length)
result(result.Length - 1) = m(index)
Next
'получаем результат массива {19,41}
Ищем элемент в массиве и получаем колчество найденных элементов
VB.NET
1
2
3
4
5
6
7
8
9
10
Dim m() As Integer = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 40}
Dim findInt As Integer = 40
Dim int() = Array.FindAll(m, New Predicate(Of Integer)(Function(v As Integer)
                                                                   If v = findInt Then
                                                                       Return True
                                                                   Else
                                                                       Return False
                                                                   End If
                                                               End Function))
MsgBox(int.Length)
6
Заблокирован
22.05.2014, 23:17
База данных Sqlite и программа на VB.NET
Hello World Sqlite

Sqlite -- локальная база данных, хорошо подходящая как для программного редактирования (sql-запросами без вмешательства пользователя, так хранятся, например, разные настройки приложений), так и для редактирования вручную (через гриды)
Одно из важнейших преимуществ Sqlite перед другими локальными базами данных-это надежность. В Sqlite нерегистрозависимый синтаксис SQL и стабильный CommandBuilder

Кроме нативной библиотеки sqlite3.dll (используется в приложениях Win32API и т.д.), имеется набор библиотек под .NET, полностью дублирующий sqlite3.dll
В наборе 3 библиотеки - System.Data.SQLite.dll, SQLite.Interop.dll и SQLite.Design.dll
SQLite.Interop.dll реализует функционал sqlite3.dll-достаточно низкоуровневое взаимодействие с БД
System.Data.SQLite.dll представляет собой оболочку над SQLite.Interop.dll с моделью классов, похожей на модель в Ado.Net (*Connection, *DataAdapter, *CommandBuilder).
SQLite.Design.dll включает в себя ряд элементов gui, способных помочь при написании программ для работы с БД, всякие диалоги, гриды и пр. Очевидно, для работы с БД, в отличии от двух предыдущих библиотек, он необязателен и рассматривать мы его не будем

Ниже привожу код формы простого приложения, обеспечивающего просмотр и редактирование БД Sqlite через грид
Помимо основноых функций, в нем:
  • предусмотрено создание файла БД, если его почему-то не окажется (программа создаст БД и будет работать с ней как если бы она была)
  • предусмотрено создание таблицы, если ее не окажется в БД
  • поле счетчик заблокировано от редактирований, которые могут привести к ошибкам
  • при попытке ввести буквы в столбец для чисел выводится не диалоговое окно, а тултип-не мешает

Код
VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
' (C) Emiliarge, 2014
 
Imports System.Data.SQLite
 
Public Class frmMain
 
#Region "Fields"
 
    Private szDbFile As String = "helloSqlite.sqlite"
    Private szDbTableName As String = "Моя таблица"
 
    Private uConn As SQLiteConnection
    Private uCmd As SQLiteCommand
    Private uAdapter As SQLiteDataAdapter
    Private uBuilder As SQLiteCommandBuilder
 
    Private dt As DataTable
 
#End Region
 
    Public Sub New()
 
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
 
        ' Add any initialization after the InitializeComponent() call.
        uConn = New SQLiteConnection(String.Format("Data Source = {0};", szDbFile))
        uConn.Open()
 
        uCmd = New SQLiteCommand(String.Format("CREATE TABLE IF NOT EXISTS [{0}] (" & _
                                               "id INTEGER PRIMARY KEY AUTOINCREMENT, " & _
                                               "'Текстовый столбец' TEXT, " & _
                                               "'Столбец для целых чисел' INTEGER" & _
                                               ")", szDbTableName), uConn)
        uCmd.ExecuteNonQuery()
 
        uAdapter = New SQLiteDataAdapter("SELECT * FROM [" & szDbTableName & "]", uConn)
        uBuilder = New SQLiteCommandBuilder(uAdapter)
        dt = New DataTable
        uAdapter.Fill(dt)
        dt.Columns("id").ReadOnly = True ' запрет на редактирование поля счетчика
        DataGridView1.DataSource = dt
    End Sub
 
    Private Sub frmMain_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
 
        uAdapter.Update(dt)
 
    End Sub
 
    Private Sub DataGridView1_DataError(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
 
        If dt.Columns(e.ColumnIndex).DataType Is GetType(Int64) Or _
            dt.Columns(e.ColumnIndex).DataType Is GetType(Int32) Or _
            dt.Columns(e.ColumnIndex).DataType Is GetType(Int16) Then
 
            Dim rectColumn As Rectangle
            rectColumn = DataGridView1.GetColumnDisplayRectangle(e.ColumnIndex, False)
 
            Dim rectRow As Rectangle
            rectRow = DataGridView1.GetRowDisplayRectangle(e.RowIndex, False)
 
            ToolTip1.ToolTipTitle = "В это поле можно вводить только целые числа"
            ToolTip1.Show(" ", _
                          DataGridView1, _
                          rectColumn.Left, rectRow.Top + rectRow.Height)
 
        End If
 
    End Sub
 
    Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
        ToolTip1.Hide(DataGridView1)
    End Sub
End Class


Ну и сам проект.
Его нужно можно посмотреть и попробовать сделать такой же своими руками.
Внимание: перед тем как подключать библиотеки Sqlite, нужно сменить конфигурацию проекта с Any CPU на x86.
В VB2008 это делается с помощью кнопки Configuration Manager... на панели инструментов.
Вложения
Тип файла: zip 0 - Hello World Sqlite.zip (563.8 Кб, 262 просмотров)
6
Заблокирован
23.05.2014, 18:33
Работаем с серверной базой данных -- Sql Server 2008 R2
Hello World Sql Server

БД MS Sql Server отменна от Access и Sqlite тем, что является сугубо серверной. Нельзя подключиться напрямую к файлу БД, его нужно сначала залить на сервер (присоединить). Тогда с данными из БД можно будет работать через клиент-сервер, в т.ч. локально (это когда sdf находится на том же компьютере, на каком к нему подключаются)
Такая БД может использоваться, например, в многопользовательской игре -- sdf будет хранится и админится на одном компе, а доступ к его данным с другого, третьего, четвертого
Админят БД Sql Server -- с помощью программы Sql Server Management Studio, надежность и юзабилити которой, честно говоря, оставляют желать лучшего.

Чтобы как-либо работать с БД MSSQL (что через Management Studio, что на VB.NET), нужно:
-1)Скачать SQL Server Express с сайта Microsoft и установить. Кажется, отсюда
0)Удостовериться, запущены ли службы SQL Server через компонент Службы, и если нет, то запустить
2)Подключиться к серверу (локальный сервер по дефолту - это localhost\sqlexpress)
3)Изменять и просматривать БД MSSQL аналогично любой другой

Итак пара исходов приложений, аналогичных Hello World Sqlite из предыдущего поста, но для MSSQL
Hello World Sql Server-точная копия Hello World Sqlite
Просмотр и редактирование БД Sqlite через грид
Помимо основных функций:
  • предусмотрено создание БД, если его почему-то не окажется, и присоединение БД, если ее файл будет иметься, но в отсоединенном виде
  • предусмотрено создание таблицы, если ее не окажется в БД
  • поле счетчик заблокировано от редактирований, которые могут привести к ошибкам
  • при попытке ввести буквы в столбец для чисел выводится не диалоговое окно, а тултип-не мешает
Код
VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
' (C) Emiliarge, 2014
 
Imports Microsoft.Win32
Imports System.IO
Imports System.Data.SqlClient
 
Public Class frmMain
 
#Region "Fields"
 
    Private szServerName As String = "localhost\sqlexpress"
    Private szDbName As String = "helloSqlServer"
    Private szConnStr As String
 
    Private szDbTableName As String = "Моя таблица"
 
    Private sqlConn As SqlConnection
    Private sqlCmd As SqlCommand
    Private sqlAdapter As SqlDataAdapter
    Private sqlBuilder As SqlCommandBuilder
 
    Private dt As DataTable
 
#End Region
 
    Public Sub New()
 
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
 
        ' Add any initialization after the InitializeComponent() call.
 
        ' Подключение к серверу
        szConnStr = String.Format("Server = {0}; " & _
                                  "Trusted_Connection = Yes; " & _
                                  "Database = master;", _
                                  szServerName)
        sqlConn = New SqlConnection(szConnStr)
        sqlConn.Open()
 
        ' Проверка, есть ли база данных
        Dim bExists As Boolean
        For Each dr As DataRow In sqlConn.GetSchema("Databases").Rows
            If dr("database_name") = szDbName Then
                bExists = True
            End If
        Next
 
        ' Создание базы данных, если ее нет
        If Not bExists Then
            ' Получение пути к папке с MSSQL (в ее подпапке DATA - файлы баз данных)
            ' По умолчанию-C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\
 
            Dim szDataPath As String = ""
            Using hKeyMSSQL = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Microsoft SQL Server")
                For Each szSubKey In hKeyMSSQL.GetSubKeyNames()
                    If szSubKey.StartsWith("MSSQL") Then
                        Using hKey = hKeyMSSQL.OpenSubKey(szSubKey).OpenSubKey("Setup")
                            szDataPath = hKey.GetValue("SQLDataRoot") + "\DATA"
                            Exit For
                        End Using
                    End If
                Next
            End Using
 
            Dim szCreateDbQuery As String
            If File.Exists(String.Format("C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\{0}.mdf", szDbName)) Then
                ' файл базы есть, но отсоединен
                szCreateDbQuery = String.Format("CREATE DATABASE [{0}] ON (" & _
                                                "    FILENAME = N'{1}\{0}.mdf'" & _
                                                ") FOR ATTACH;", _
                                                szDbName, szDataPath)
 
            Else
                ' базы нет вообще
                szCreateDbQuery = String.Format("CREATE DATABASE [{0}] ON (" & _
                                                "    NAME = {0}, " & _
                                                "    FILENAME = N'{1}\{0}.mdf'" & _
                                                ");", _
                                                szDbName, szDataPath)
            End If
            sqlCmd = New SqlCommand(szCreateDbQuery, sqlConn)
            sqlCmd.ExecuteNonQuery()
        End If
 
        ' Подключение к базе
        szConnStr = String.Format("Server = {0}; " & _
                                  "Trusted_Connection = Yes; " & _
                                  "Database = {1};", _
                                  szServerName, _
                                  szDbName)
        sqlConn = New SqlConnection(szConnStr)
        sqlConn.Open()
 
        ' Создание таблицы, если ее нет
        Dim szCreateQuery As String
        szCreateQuery = String.Format("IF NOT EXISTS (" & _
                                      "    SELECT [name] " & _
                                      "    FROM sys.tables " & _
                                      "    WHERE [name] = '{0}'" & _
                                      ") " & _
                                      "CREATE TABLE [{0}] (" & _
                                      "    id [INT] IDENTITY(1,1) PRIMARY KEY CLUSTERED, " & _
                                      "    [Текстовый столбец] [TEXT] NULL, " & _
                                      "    [Столбец для целых чисел] [INT] NULL " & _
                                      ")", _
                                      szDbTableName)
        sqlCmd = New SqlCommand(szCreateQuery, sqlConn)
        sqlCmd.ExecuteNonQuery()
 
        ' Загрузка таблицы
        sqlAdapter = New SqlDataAdapter("SELECT * FROM [" & szDbTableName & "]", sqlConn)
        sqlBuilder = New SqlCommandBuilder(sqlAdapter)
        dt = New DataTable
        sqlAdapter.Fill(dt)
        dt.Columns("id").ReadOnly = True ' запрет на редактирование поля счетчика
        DataGridView1.DataSource = dt
 
    End Sub
 
    Private Sub frmMain_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
 
        sqlAdapter.Update(dt)
 
    End Sub
 
    '
    ' DataGridView1
    '
 
    Private Sub DataGridView1_DataError(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
 
        If dt.Columns(e.ColumnIndex).DataType Is GetType(Int64) Or _
            dt.Columns(e.ColumnIndex).DataType Is GetType(Int32) Or _
            dt.Columns(e.ColumnIndex).DataType Is GetType(Int16) Then
 
            Dim rectColumn As Rectangle
            rectColumn = DataGridView1.GetColumnDisplayRectangle(e.ColumnIndex, False)
 
            Dim rectRow As Rectangle
            rectRow = DataGridView1.GetRowDisplayRectangle(e.RowIndex, False)
 
            ToolTip1.ToolTipTitle = "В это поле можно вводить только целые числа"
            ToolTip1.Show(" ", _
                          DataGridView1, _
                          rectColumn.Left, rectRow.Top + rectRow.Height)
        End If
 
    End Sub
 
    Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
 
        ToolTip1.Hide(DataGridView1)
 
    End Sub
End Class

Hello World Sql Server -- Lite-это урезанный вариант предыдущего исхода, в котором есть только необходимое
Подключаемся, селектим таблицу, настраиваем билдер запросов для обновления, заливаем в грид, при выходе заапускаем Update и все
Базу данных и таблицу тут надо создавать вручную в Management Studio, как их назвать-видно из кода
Все же надо быть дружелюбнее к новичкам, которые обычно и нуждаются в исходах и туториалах
Код
VB.NET
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
36
' (C) Emiliarge, 2014
 
Imports System.Data.SqlClient
 
Public Class frmMain
 
#Region "Fields"
 
    Dim sqlConn As SqlConnection
    Dim sqlAdapter As SqlDataAdapter
    Dim sqlCmdBuilder As SqlCommandBuilder
 
    Dim dt As New DataTable
 
#End Region
 
    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
 
        sqlConn = New SqlConnection("Server = localhost\sqlexpress; Trusted_Connection = Yes; Database = helloSqlServer;")
 
        sqlAdapter = New SqlDataAdapter("SELECT * FROM [Моя таблица]", sqlConn)
 
        sqlCmdBuilder = New SqlCommandBuilder(sqlAdapter)
 
        sqlAdapter.Fill(dt)
        DataGridView1.DataSource = dt
 
    End Sub
 
    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
 
        sqlAdapter.Update(dt)
 
    End Sub
 
End Class


Ну и сами проекты
З.Ы. Проекты испытывались только на MSSQL 2008 R2
З.З.Ы. Все вопросы в личку, тут и без этого места мало.
Вложения
Тип файла: zip 0 - Hello World Sql Server.zip (69.7 Кб, 105 просмотров)
Тип файла: zip 1 - Hello World Sql Server -- Lite.zip (65.5 Кб, 85 просмотров)
3
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
02.06.2014, 03:23
Делаем копию изображения определенного объекта.
Конечно простятский код, но может быть кому нибудь пригодится.

Создаём объект и снимаем с него изображение, но при этом не размещаем его на форме.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Dim btn1 As New Button 'экземпляр объекта
With btn1
            .Size = New Size(300, 150)
            .Text = "Button1 (Кнопка)"
            .BackColor = Color.Black
            .ForeColor = Color.White
 
             Dim imageBtn1 As New Bitmap(btn1.Width, btn1.Height) 'изображение
            .DrawToBitmap(imageBtn1, btn1.ClientRectangle) 'рисуем
             imageBtn1.Save("C:\1.png")'сохраняем в файл
End With
2
 Аватар для GSXL
172 / 180 / 27
Регистрация: 26.11.2011
Сообщений: 386
Записей в блоге: 1
06.06.2014, 12:03
Как быстро сделать 10000 уникальных записей в SQLite.
Как известно это реляционная база данных которая хранится в 1 файле (по большей части возле самого проекта) и для каждого действия этот файл открывается и закрывается. Потому у многих возникает трудности с созданием множественных запросов а именно времени их выполнения. Это связано с открытием/закрытием файла для каждого запроса.
Для этого можно использовать транзакцию. Это позволяет выполнить все 10000 записей открыв файл БД только 1 раз. Почему я использую именно транзакцию? Я считаю так: если выполняется 2 и более чтение/запись нужно использовать транзакцию, так как только здесь можно с точностью быть уверенным что все запросы будут выполнены успешно, или не будет выполнено не чего.
В моем примере создается файл БД на рабочем столе, создается таблица и заполняется 10000 уникальных записей, по окончанию выводится отчет времени выполнения или ошибка с её описанием.
Так же хочу заметить что библиотека SQLite зависима от разрядности windows.
Если добавить в проект библу SQLite для 32 битной системы а в свойствах проекта поставить "Целевой ЦПУ = х86" то проект будет работать и в х64 и в х86 битной системе.

Кликните здесь для просмотра всего текста
VB.NET
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
36
37
38
39
40
41
42
43
44
45
46
47
48
Imports System.Data.SQLite
 
Public Class Form1
 
    Private Sub Button1_Click() Handles Button1.Click
        'Старт замера скорости выполнения кода
        Dim SW As New Stopwatch
        SW.Start() '
        'Открываем или создаем БД на рабочем столе
        Dim sqConnection As New SQLiteConnection("Data Source=" & My.Computer.FileSystem.SpecialDirectories.Desktop & "\my_SQLite_DB.sqlite")
        sqConnection.Open()
 
        Dim sqCommand As New SQLiteCommand()
        sqCommand.Connection = sqConnection
        Dim myTrans As SQLiteTransaction
        myTrans = sqConnection.BeginTransaction()
        sqCommand.Transaction = myTrans
        'Код удачного выполнения транзакции
        Try
            'Создаем таблицу в базе данных
            sqCommand.CommandText = "CREATE TABLE 'Dept2' ('id' INTEGER PRIMARY KEY AUTOINCREMENT, 'rand' TEXT);"
            sqCommand.ExecuteNonQuery()
 
            For i = 1 To 10000
                'Создаем 10000 индивидуальных записей
                sqCommand.CommandText = "INSERT INTO 'Dept2' ('rand') Values ('" & "Запись № " & i & "');"
                sqCommand.ExecuteNonQuery()
                'Тут же можно запихать и иные команды
                'sqCommand.CommandText = "INSERT INTO 'Dept2' ('rand') Values ('PRODUCTION')"
                'sqCommand.ExecuteNonQuery()
            Next
            'Отмена записи в БД при какой либо ошибки или не возможности выполнить оду из каманд SQL 
            myTrans.Commit()
        Catch e As Exception
            SW.Stop() 'Останавлеваем замер
            'Выводим ошибку
            myTrans.Rollback()
            MsgBox(e.Message, MsgBoxStyle.Critical, "Ошибка")
        Finally
            'Закрываем файл БД
            sqConnection.Close()
        End Try
        'Останавлеваем замер и выводим результат
        SW.Stop()
        MsgBox("Время выполнения:" & Chr(13) & SW.Elapsed.Seconds & " c." & Chr(13) & SW.ElapsedMilliseconds & " мc.") 'Время выполнения в миллисекундах
    End Sub
 
End Class


Проект для Win_64 .Net_3.5 ( в проекте есть библы для Win_32)
Миниатюры
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)  
Вложения
Тип файла: zip SQLite_транзакция_(Win_64).zip (1.79 Мб, 226 просмотров)
7
 Аватар для GSXL
172 / 180 / 27
Регистрация: 26.11.2011
Сообщений: 386
Записей в блоге: 1
06.06.2014, 13:42
Штрих код формата EAN-13

Присоединяем библиотеку BAR.dll
Устанавливаем шрифт ean13.ttf

на форме создаём 2 текстбокса.
Устанавливаем свойство 1 тексбокса: максимум символов 12 (так как 13 цифра EAN13 это проверочный код).
Во 2м выставляем установленный нами шрифт (Code Ean13) и размер 36.
VB.NET
1
2
3
4
5
6
7
8
Imports BAR
Public Class Form1
 
    Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUp
        TextBox2.Text = BAR.CODE.EAN13(TextBox1.Text)
    End Sub
 
End Class
Любой символ не являющийся цифрой библиотека воспринимает как 0.
Во вложение работающий проект с библиотекой и шрифтом.
Миниатюры
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)  
Вложения
Тип файла: zip EAN13_.zip (92.6 Кб, 192 просмотров)
8
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2014, 13:42
Помогаю со студенческими работами здесь

Basic4Android. Готовые решения полезные коды
Предлагаю в этой теме делиться полезными кодами. Ну как Visual Basic.NET. Там есть такая тема. Думаю многим будет интересно. ...

Полезные коды для PascalABC.NET
В этой теме размещаются полезные исходники программ, различные процедуры и функции, а так же готовые решения на часто задаваемые вопросы,...

Готовые коды для решения лабораторных работ
Доброго времени суток всем! Очень срочно нужны готовые коды для решения лабораторных работ в С# по учебнику Павловской!!! Вариант 16, нужны...

Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net ?
Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net

Visual Basic 6 и Visual Basic .NET - в чем различия?
Visual Basic и Visual studio это не одно и тоже? если нет то в чём разница, по мимо оформления?


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

Или воспользуйтесь поиском по форуму:
100
Закрытая тема Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru