| 
|   | 
    
請思考一個問題,凡參賽選手,為何大家都能完成題目,然而冠軍是你不是他?  
  想要高人一等,一招一式,舉手抬足均要拳拳到位,否則你與一般選手並無兩樣。
  
比賽時須注意重點順序如下: 
1)功能須完整。(佔比例較高者,優先完成) 
2)防呆設計。 
3)介面須容易操作。(美觀其次) 
4)修飾程式碼,提升演算法執行時間與記憶體使用效率。 
5)註解、程式碼可讀性。
  
【除錯方式】 
寫程式在開發時,任何人都會碰上程式除錯階段,尤其在比賽階段,明 
明就只差那臨門一腳,但時間慢慢逼近,有可能這個程式小 bug,就是你 
能不能上榜的關鍵,時間越靠近,選手心情會越緊張,越不容易察覺錯誤, 
因此迅速找出錯誤所在,就變成非常重要的一環,以下介紹三種除錯方式 
供參考。
  
1)輸出變數方式 
在 form 的版面上,放置臨時暫用的標籤 (label),在你覺得錯誤的地方, 
令 label.text 顯示重要的變數內容,是否為你想要的。
  
2)顯示變數內容有可能會因電腦執行速度過快(尤其是迴圈內執行標籤顯示), 
而無法目睹變數的內容,此時可考慮使用檔案方式,把內容一次一次寫入 
檔案,待程式結束後,開啟檔案觀察。
  
3)vb.net 是一個很好用的開發介面,使用者可以藉由 vb.net 的 IDE 介面, 
設定中斷點、單步執行或條件觸發中斷,是一種非常方便又多數人使用的 
方法。 
  
 
4)使用 Debug.Print() 指令可以在輸出視窗看到想觀察的變數內容。 
  
或是中斷程式後,在下方子功能視窗內選取輸出視窗 
  
 
【防呆方式】 
比賽時有時會輸入一些意外的訊息,這是要考驗選手的程式經驗與心思細膩度,以下有幾種方式處理供參考。 
 
1)鍵盤鎖定輸入資料的長度。(例如資料為 0 ~ 100,則長度最長為 3) 
 
  
步驟一、 
點選要限制的輸入方塊。
  
步驟二、 
找到元件屬性視窗。(可以從功能表【檢視】找到)(快速鍵 F4) 
 
  
步驟三、  
修改 MaxLength 屬性。
  
2)鍵盤鎖定能輸入的字元,通常輸入資料為整數,則下列程式碼可鎖定輸入字元。
  
步驟一、 
點擊輸入方塊盒兩下,進入編碼模式。 
或是找到方案總管(可以從功能表【檢視】找到)(快速鍵 Ctrl-Alt-L) 
  
  
步驟二、  
在方案總管內,找到 Form1名稱,並點擊下面的proc 進入編碼視窗 
 
 
  
步驟三、在程式碼區的元件欄找到 Textbox1 (假設輸入盒名稱為 Textbox1),並在事件欄找到 KeyPress 事件。 
然後會自動產生事件驅動的函數編碼區,鍵入下列程式碼就會有相對應的功能。 
  
 
【鎖定 0 ~ 9 數字鍵及退回鍵】 
e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8)) 
 
【鎖定 0 ~ 9 數字鍵、退回鍵、小數點與負號】 
e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Or e.KeyChar ="." Or e.KeyChar ="-") 
 
【鎖定 0 ~ 9 數字鍵、退回鍵、大寫英文字母】 
e.Handled = Not (Char.IsDigit(e.KeyChar)Or e.KeyChar = Chr(8) Or Char.IsUpper(e.KeyChar)) 
 
【鎖定 0 ~ 9 數字鍵、退回鍵、小寫英文字母】 
e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Or Char.IsLower(e.KeyChar)) 
 
【鎖定 0 ~ 9 數字鍵、退回鍵、空白鍵,並且按下 Enter 可以自動執行 Button1_Click 程式】 
e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Or e.KeyChar = " ") 
If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then 
    Button1_Click(sender, e) 
End If 
 
更多的 Char 用法在Microsoft 技術文件 
 
 3)數字範圍鎖定。(例如輸入成績,只能 0 至 100) 
 
步驟一、 
切換到程式碼區,找到程式執行區域(通常是按鈕按了以後執行) 
 
步驟二、 
假設 TextBox1 要限制 0 ~ 1000000,則程式碼如下: 
Dim n As Integer = Val(TextBox1.Text) 
If (n > 1000000) Then 
    MsgBox("n 超出範圍 0 <= n <= 1000000,請重新輸入。") 
    Exit Sub 
End If  
 
  
 
 
4)介面排列,請善用功能表的 格式、對齊與間距工具。 
可以直接使用快速鍵(須預先選好要調整的元件)。 
  
 
選好元件以後,就可以使用快速鍵。 
  
 
也可以使用功能表(效果同上) 
 
  
 
  
 
  
5)每一題的介面相同時,可以用複製的方式,將已經設計好的介面,複製到新專案。  
步驟一、 
設計好的專案介面,點選 form 任意空白處,按下 Ctrl - A (全選) 
  
  
步驟二、 
按下 Ctrl - C (複製)
  
步驟三、 
關閉方案
  
步驟四、 
開啟新專案
  
步驟五、 
點選 form 任意空白處,按下 Ctrl - V (貼上) 
 
  
動態產生物件方式: 
比賽時,常會碰到輸入盒或按鈕是依據當時輸入的資料決定的,例如下面畫面當 Textbox1 輸入不同值時所產生的畫面
  
Const N As Integer = 9 
Const X1 As Integer = 16 
Const Y1 As Integer = 69 
Const DX As Integer = 42 
Const DY As Integer = 42 
Const TBWH As Integer = 36 
Public TB(N, N) As TextBox
  
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
Dim x As Integer, y As Integer  For y = 0 To N - 1 
    For x = 0 To N - 1 
        TB(y, x) = New TextBox 
        TB(y, x).Size = New System.Drawing.Size(TBWH, TBWH)  
        TB(y, x).Text = ""  
        TB(y, x).Location = New Point(X1 + x * DX, Y1 + y * DY) 
        Controls.Add(TB(y, x))  
        TB(y, x).MaxLength = 1  
        TB(y, x).TabIndex = y * N + x 
        AddHandler TB(y, x).KeyPress, AddressOf TBkeyPress    Next 
Next 
End Sub
  
'限制輸入內容  
Public Sub TBkeyPress(sender As Object, e As KeyPressEventArgs)  
    Dim tbt As TextBox = CType(sender, TextBox),  x As Integer, y As Integer 
    e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8)) 
    x = tbt.TabIndex Mod N '取得物件二維註標 x 值 
    y = tbt.TabIndex \ N '取得物件二維註標 y 值 
    'x = (tbt.Left - X1) / DX : y = (tbt.Top - Y1) / DY '使用位置來判定註標也可以 
    tbt.Text = "Hello" '相當於設定 TB(y, x) 
End Sub
  讀取檔案的方式 有時候,讀檔案必須指定絕對路徑,但是當系統移植至其他環境時,該絕對路徑已經不存在, 因此,常常需要相對路徑,而相對的路徑是系統執行檔的位置路徑,以下介紹如何以絕對路徑 與相對路徑並存的設定。
  Dim path As String = "" '當 TextBox1.Text 第 1 個字不是 $ 時,就以絕對路競存取,否則前面會加上系統執行的路徑 If (TextBox1.Text.Substring(0, 1) = "$") Then       path = Application.StartupPath & "\..\..\..\" & TextBox1.Text.Substring(1)  Else      path = TextBox1.Text  End If  If (Not System.IO.File.Exists(path)) Then      MsgBox("檔案 " & path & " 不存在.")      Return End If  FileOpen(1, path, OpenMode.Input)
 
  以下是以 Dialog 開啟檔案 Dim myStream As IO.Stream = Nothing Dim openFileDialog1 As New OpenFileDialog() openFileDialog1.InitialDirectory = Application.StartupPath & "\..\..\..\"  openFileDialog1.Filter = "txt files (*.in)|*.txt|All files (*.txt)|*.*"  openFileDialog1.FilterIndex = 2  openFileDialog1.RestoreDirectory = True  If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then '開啟檔案對話框      Try           If (myStream Is Nothing) Then                FileOpen(1, openFileDialog1.FileName, OpenMode.Input) '取得的檔名在 openFileDialog1.FileName                Input(1, TextBox1.Text)           End If      Catch Ex As Exception           MessageBox.Show("無法讀取資料" & Ex.Message)      Finally           If (myStream IsNot Nothing) Then                myStream.Close()           End If      End Try  End If
  
 |   
 |