VB.Net 實務筆記
2012年12月11日 星期二
Telnet ... 簡單的寫法
Private T_Stream As Net.Sockets.NetworkStream
Private T_Client As New Net.Sockets.TcpClient()
Private bytWriting As [Byte]()
Private bytReading As Byte()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
T_Client.SendTimeout = 1500
T_Client.Connect("主機IP", "23")
T_Stream = T_Client.GetStream
System.Threading.Thread.Sleep(1500) ' 暫停一下等主機回應
TextBox1.Text = TextBox1.Text & ReadData() & vbCrLf ' 取得回應的資料
WriteData("帳號指令等" & vbCrLf) ' 輸入 ... 重複 WriteData ReadData 就跟用 Telnet 一樣
System.Threading.Thread.Sleep(500)
TextBox1.Text = TextBox1.Text & ReadData() & vbCrLf
T_Stream.Close()
T_Client.Close()
End Sub
Private Function ReadData() As String
Dim sData As String
ReDim bytReading(T_Client.ReceiveBufferSize)
T_Stream.Read(bytReading, 0, T_Client.ReceiveBufferSize)
sData = Trim(System.Text.Encoding.Default.GetString(bytReading))
ReadData = sData
End Function
Private Sub WriteData(ByVal sData As String)
bytWriting = System.Text.Encoding.Default.GetBytes(sData)
T_Stream.Write(bytWriting, 0, bytWriting.Length)
End Sub
備註:如果回傳的資料過大,可能會漏掉部份內容,
因為 ReceiveBufferSize 預設為 8192,
可於 ReadData() 增加下列語法,加大 BufferSize
T_Client..ReceiveBufferSize = xxxxxx
2012年12月7日 星期五
控制項名稱動起來
如果希望依程式需要引用同類的控制項,
可以使用 Controls("控制項" & 變數),
底下是個簡單的範例,
將五張圖片隨機填入五個 picturebox。
Dim xnum As Integer
For si = 1 To 5
xnum = Math.Round(Rnd() * 6, 0)
Select Case xnum
Case 0
Controls("picturebox" & si).BackgroundImage = My.Resources._1
Case 1
Controls("picturebox" & si).BackgroundImage = My.Resources._2
Case 2
Controls("picturebox" & si).BackgroundImage = My.Resources._3
Case 3
Controls("picturebox" & si).BackgroundImage = My.Resources._4
Case 4
Controls("picturebox" & si).BackgroundImage = My.Resources._5
End Select
Next
DataGridView 定義時間格式
從資料庫讀取時間欄位載入到 DataGridView 時,
秒數可能會不見,
只要指定時間格式就 OK了。
DataGridView1.Columns("time_arrive").DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"
秒數可能會不見,
只要指定時間格式就 OK了。
DataGridView1.Columns("time_arrive").DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"
執行程式時提示訊息的方法
在執行程式時,如果希望提示訊息,
可以用以下的方式:
Dim Excuting_msg As New Form
Excuting_msg.TopMost = True
Excuting_msg.Width = "300"
Excuting_msg.Height = "230"
Excuting_msg.Text = "Message !!!"
'下面這行可以放圖上去
Excuting_msg.BackgroundImage = My.Resources.Resources.圖的檔名
Excuting_msg.BackgroundImageLayout = ImageLayout.Stretch
Excuting_msg.StartPosition = FormStartPosition.CenterScreen
Excuting_msg.Show()
'執行完畢時將訊息關閉。
Excuting_msg.Close()
備註:將圖加入資源的流程:
1.方案名稱按右鍵點屬性
2.點資源 > 加入資源 > 加入現有檔案
這樣就可以引用資源圖片了。
2012年12月5日 星期三
Multithreading 初體驗
程式長時間執行時想中斷程式,會發現介面完全無法操作,
採用 Multithreading 可以解決這個問題,
以下是簡單的範例 ... 中斷無限迴圈
Imports System.Threading
Public Class Form1
Dim Thread_A As Thread = Nothing
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Thread_A = New Thread(New ThreadStart(AddressOf Me.ThreadAsub))
Thread_A.IsBackground = True
Thread_A.Start()
End Sub
Private Sub ThreadAsub()
Dim c_ID As String
Dim x As Integer = 0
c_ID = Thread.CurrentThread.GetHashCode() ' 這行可取得 Thread ID
update(c_ID, TextBox1)
Do Until x = 1
update("測試字串", TextBox2) '無限迴圈寫入字串
Loop
End Sub
' 因為 Thread_A 跟操作介面是不同的 Thread,無法直接寫入TextBox,
改採以下的寫法就可以順利運作
Private Delegate Sub updateX(ByVal MyText As String, ByVal c As Control)
Private Sub update(ByVal MyText As String, ByVal c As Control)
If Me.InvokeRequired() Then
Dim cb As New updateX(AddressOf update)
Me.Invoke(cb, MyText, c)
Else
If c.Name = "TextBox1" Then
c.Text = MyText
ElseIf c.Name = "TextBox2" Then
TextBox2.AppendText(MyText & vbCr)
End If
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Thread_A.Abort() ' 中斷程式
End Sub
End Class
DateTimePicker 取得一週後的日期
DateTimePicker1.Value.AddDays(7).Date.ToString("MM/dd/yyyy")
只要改變 AddDays(num) 的數字,
就可以取得特定日期字串,
搭配 ToString 可輸出不同的日期格式,
例如:ToString("yyyy-MM-dd") 等等。
2012年12月4日 星期二
RichTextBox SelectionBackColor 還原
RichTextBox1.SelectionStart = 0
RichTextBox1.SelectionLength = RichTextBox1.Text.Length
RichTextBox1.SelectionBackColor = Color.White
就是全選後塗成白色就還原了。
訂閱:
文章 (Atom)