2013-01-22 39 views
1

這個私人小組一直告訴我'Property Chars:ReadOnly'。VB.net - 'Property Chars:ReadOnly'錯誤替換字符串的字母

我哪裏出錯了? StrWord是一個字符串,例如'香蕉'。

我希望它會做的是循環遍歷單詞,如果'猜測'(單個字母)與字符串中的任何字母匹配(StrWord),它會替換它的文本框中的相應字母這個單詞。

這麼hang子手,或多或少。

感謝和問候,
卡梅隆。

Private Sub Lookup(ByVal Guess) 
    Dim Count As Integer = 0 
    For Each Character As Char In StrWord 
     If Character = Guess Then 
      txtResult.Text(Count) = Guess 
     Else 
      Count += 1 
     End If 
    Next 
End Sub 

回答

-1

您是否將文本框設置爲ReadOnly以防止用戶修改它?如果是這樣,您可能需要將其從ReadOnly更改爲進行更改,然後將其更改回ReadOnly。

你也可以嘗試改變這種方式:

txtResult.Text.Replace(Character, Guess) 
+0

這將很好地工作;但遺憾的是,這個詞包含星號(被隱藏),直到有一個正確的猜測,那麼在該詞中的該字符的實例被顯示以代替星號。這就是爲什麼我必須在索引之前做到這一點。 我很抱歉沒有提到這之前! – c3ntury

4

字符串在.NET中是不可變的。這意味着你不能改變它們。相反,您需要創建一個新字符串並將其分配給Text屬性。你會發現System.Text.StringBuilder類也是有用的,因爲它是可變的,你可以用ToString方法將它轉換成字符串。

嘗試這樣:

Private Sub Lookup(ByVal Guess As Char) 

    Dim temp as new StringBuilder(txtResult.Text) 

    Dim Count As Integer = 0 
    For Each Character As Char In StrWord 
     If Character = Guess Then 
      temp.Chars(Count) = Character 
     Else 
      Count += 1 
     End If 
    Next 
    txtResult.Text = temp.ToString() 

End Sub 

或本:

Private Sub Lookup(ByVal Guess As Char) 

Dim temp as new StringBuilder() 

Dim Count As Integer = 0 
For Each Character As Char In StrWord 
    If Character = Guess Then 
     temp.Append(Character) 
    Else 
     temp.Append("*") 
     Count += 1 
    End If 
Next 
txtResult.Text = temp.ToString() 

末次