阿言讀者的問題

摘要:阿言讀者的問題

原發問問題:

 

老師您好,我有兩個問題,在檔案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屬性值,而且「事件記錄」文字方塊也會即時顯示出MaskInputRejectedTypeValidationCompleted事件的處理結果。

請大家特別注意表單之Load事件處理常式的下面這一道陳述式:

Me.maskedTextBox1.ValidatingType = GetType(IPv5)

這表示MaskedTextBox控制項的驗證型別是IPv5IPv5是一個使用者自訂類別,其定義撰寫於IPv5.vb中。此意味著,使用者所輸入的IP位址是否為一個符合驗證型別所要求的IP位址,將由使用者自訂類別IPv5Parse方法的剖析結果來決定:

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