摘要:阿言讀者的問題
原發問問題:
老師您好,我有兩個問題,在檔案IO與資料存取秘訣找不到(或許我看漏了^^")麻煩您幫我解答,以下兩個問題影響了我的開發,
問題一:
我啟用了DataGridView的新增、刪除、編輯,但我新增資料時,一定要編輯完按下 Enter 、再引發儲存的事件,資料才會正常寫入資料庫中,該如何不按Enter,只要有編輯新增的列,就直接儲存至資料庫,我事件的寫法如下:
Private Sub ToolStripButton1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
Me.ProxyBindingSource.EndEdit()
Me.ProxyTableAdapter.Update(Me.MakeingDataSet.proxy)
End Sub
問題二:
可否預設輸入字串的 mask ,例如某一欄位我使想他輸入ip位址ex: xxx.xxx.xxx.xxx那麼選中該欄位的時後,可否直接出現 ___.___.___.___
然後user直接填入ip的數字即可…
親愛的阿言讀者您好,很感謝您對於章立民研究室的支持,有關於您提到的問題,回覆如下:
問題一:
一般來說,會以使用者是否按下Enter鍵或者是自訂的按鈕,來決定是否完成編輯資料的動作,只要不按下Enter鍵或按鈕,就視為編輯資料動作未完成,不會變更資料庫的內容。
如果希望只要有編輯新增的列,就直接儲存至資料庫,由於無法確實判斷使用者接下來的動作,所以必須於「所有可能被使用者觸發的事件」中撰寫執行資料更新的程式碼。因此,除了DataGridView控制項的事件之外,特別要注意還有表單的事件,比如說,FormClosing事件,要撰寫對應的事件處理常式。
問題二:
圖表1
圖表1所示者是程式範例的執行畫面,它使用MaskedTextBox控制項來驗證使用者輸入的Ip位址。在您輸入的同時,「Text屬性的值」文字方塊會同步顯示出MaskedTextBox控制項的Text屬性值,而且「事件記錄」文字方塊也會即時顯示出MaskInputRejected與TypeValidationCompleted事件的處理結果。
請大家特別注意表單之Load事件處理常式的下面這一道陳述式:
Me.maskedTextBox1.ValidatingType = GetType(IPv5)
這表示MaskedTextBox控制項的驗證型別是IPv5,IPv5是一個使用者自訂類別,其定義撰寫於IPv5.vb中。此意味著,使用者所輸入的IP位址是否為一個符合驗證型別所要求的IP位址,將由使用者自訂類別IPv5之Parse方法的剖析結果來決定:
Public Shared Function Parse(ByVal s As String) As IPv5
Dim bytes(3) As Integer
' 移除字串中的任何空格。
s = s.Replace(" ", "")
' 將字串切割成位元組字串。
Dim strBytes As String() = s.Split(New Char() {"."c})
Try
Dim byteIndex As Integer = 0
Dim strByte As String
For Each strByte In strBytes
' 嘗試解析成一個整數。
bytes(byteIndex) = Integer.Parse(strByte)
' 檢查邊界。
' 檢驗有效範圍中的最後一個位元組。
' (前三個位元組是1 - 255,最後一個位元組是0 - 255)
If bytes(byteIndex) > 255 OrElse (bytes(byteIndex) < 1 _
AndAlso byteIndex < 3) Then
Throw New ArgumentException(String.Format(CultureInfo.CurrentCulture, _
"您所提供的字串{0} 不是一個有效的IPv5 IP 位址", s))
End If
byteIndex += 1
Next strByte
Catch
Throw New ArgumentException(String.Format(CultureInfo.CurrentCulture,
"您所提供的字串{0} 不是一個有效的IPv5 IP 位址", s))
End Try
Return New IPv5(bytes(0), bytes(1), bytes(2), bytes(3))
End Function
有關MaskedTextBox控制項更完整的使用方法,請參考章立民研究室所出版的「Visual Basic 2005 程式開發與介面設計秘訣」書中,第四章「MaskedTextBox控制項可以使用自訂的驗證型別嗎?」一節的說明。
章立民研究室 2007/04/23