[精讚] [會員登入]
242

[VB.NET] ComboBox 使用For迴圈移除項目

ComboBox 使用For迴圈移除項目,看起來很簡單,實際上會遇到什麼問題呢

分享此文連結 //n.sfs.tw/15621

分享連結 [VB.NET] ComboBox 使用For迴圈移除項目@大塚 宏 ~認真玩・輕鬆學~
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-03-02 20:26:42 最後編修
2022-03-02 15:53:41 By 大塚 宏
 

自動目錄

前言

假設有一個ComboBox選單,選項為0 ~ 200(共201項)

For i = 0 To 200
    ComboBox1.Items.Add(i)
Next

需要從第0項,檢核到最後一項

當中只要是"小於20"的選項都必須移除(使用ComboBox1.Items.Remove())

實作

For i = 0 To ComboBox1.Items.Count - 1
    If ComboBox1.Items(i) < 20 Then
        ComboBox1.Items.Remove(i)
    End If
Next

看起來很簡單

使用for迴圈,i 從 0 到 ComboBox1.Items.Count - 1 (i = 0 ~ 200)

直接跑一圈,途中發現數值 < 20 的話,就將該項目移除(ComboBox1.Items.Remove(i))

不過執行後,卻發現......

 

 

出錯了,看來是索引值超出上限

因為在途中移除清單選項的話,ComboBox的索引上限也會跟著減少

原本ComboBox最大索引是200

中間假設移除了10項,索引極限為190

當 for 迴圈的 i 跑到第191的時候,便會出錯

再度挑戰

Dim j = 0

For i = 0 To ComboBox1.Items.Count - 1
    If ComboBox1.Items(j) < 20 Then
        ComboBox1.Items.RemoveAt(j)
    Else
        j += 1
    End If
Next

解決此問題,只要多宣告一個變數 j 即可

j = 0 代表固定移除清單第一個選項

如果for迴圈途中遇到不想移除的選項,就執行j += 1

之後便會跳過,改從第二個選項開始移除

問題解決~

程式碼分享

如果覺得上面的解釋太抽象,自己執行一遍,是最快的學習途徑

重點在摸熟程式碼的流向,也可以觀察變數 i 、j 是怎麼變化的

 

開新專案,將底下程式碼完整複製貼上至後端

(前端不須新增控制項)

即可執行

Public Class Form1
    Public ComboBox1 As New ComboBox
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '前端控制項宣告
        Me.Size = New Size(300, 260)

        ComboBox1.Location = New Point(75, 90)
        Me.Controls.Add(ComboBox1)

        '選單賦值,新增選項0 ~ 200
        For i = 0 To 200
            ComboBox1.Items.Add(i)
        Next

        '錯誤寫法
        'For i = 0 To ComboBox1.Items.Count - 1
        '    If ComboBox1.Items(i) < 20 Then
        '        ComboBox1.Items.Remove(i)
        '    End If
        'Next

        Dim j = 0

        For i = 0 To ComboBox1.Items.Count - 1
            If ComboBox1.Items(j) < 20 Then
                ComboBox1.Items.RemoveAt(j)
            Else
                j += 1
            End If
        Next
    End Sub
End Class

END

你可能感興趣的文章

[VB.NET] A=B小遊戲(附原始碼) A=B小遊戲(附原始碼)

[VB.NET] 費式數列的2種解法 [遞迴 + 記憶法] 記憶法(Memoization) 將計算的結果保存起來,以備下次遇到同樣問題時使用。

[VB.NET] 分治法+遞迴練習 12個硬幣中,有一個偽幣重量較輕(設為0),其他正常硬幣重量較重(設為1) 透過分治法+遞迴,找出偽幣的位置

[VB.NET] ComboBox 使用For迴圈移除項目 ComboBox 使用For迴圈移除項目,看起來很簡單,實際上會遇到什麼問題呢

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[VB.NET] 分治法+遞迴練習 12個硬幣中,有一個偽幣重量較輕(設為0),其他正常硬幣重量較重(設為1) 透過分治法+遞迴,找出偽幣的位置

動態文字框(TEST) 多邊文字框(TEST)

計算友好數 var counter = 1; function find(num){ var a = num; var atotal