2015-02-16 4 views
1

У меня есть оператор Case, который возвращает другое количество нулей в зависимости от выбранного случая. Мне нужен способ, если количество нулей больше 3, обрезать последние 3 нуля из строки. В настоящее время у меня есть случаи, возвращающие строки, такие как «0» или «000000». В этой ситуации код превратит «000000» в «000».Обрезка последних трех символов из строки на основе условия

я в настоящее время:

If NumberOfZeros.Length > 3 Then 
    NumberOfZeros.Remove(0, NumberOfZeros.Length - 3) 
End If 

Но очевидно, что это не работает. Любая помощь будет принята с благодарностью!

EDIT: Если кто-нибудь может уточнить это сообщение, сделайте пожалуйста. По просьбе комментария здесь рассматривается CASE.

Dim Colour As String = " " 
    Colour = Cmbl3.SelectedItem 

    Select Case Colour 
     Case "Black" 
      NumberOfZeros = "0" 
      lblcolour3.BackColor = Color.Black 
      Cmbr.Enabled = True 
     Case "Brown" 
      NumberOfZeros = "00" 
      lblcolour3.BackColor = Color.SaddleBrown 
      Cmbr.Enabled = True 
     Case "Red" 
      ValueOf0s = "000" 
      lblcolour3.BackColor = Color.Red 
      Cmbr.Enabled = True 
     Case "Orange" 
      NumberOfZeros = "0000" 
      lblcolour3.BackColor = Color.Orange 
      Cmbr.Enabled = True 
     Case "Yellow" 
      NumberOfZeros = "00000" 
      lblcolour3.BackColor = Color.Yellow 
      Cmbr.Enabled = True 
     Case "Green" 
      ValueOf0s = "000000" 
      lblcolour3.BackColor = Color.Green 
      Cmbr.Enabled = True 
     Case "Blue" 
      NumberOfZeros = "0000000" 
      lblcolour3.BackColor = Color.Blue 
      Cmbr.Enabled = True 
     Case "Violet" 
      NumberOfZeros = "00000000" 
      lblcolour3.BackColor = Color.DarkViolet 
      Cmbr.Enabled = True 
     Case "Grey" 
      NumberOfZeros = "000000000" 
      lblcolour3.BackColor = Color.Gray 
      Cmbr.Enabled = True 
     Case "White" 
      NumberOfZeros = "0000000000" 
      lblcolour3.BackColor = Color.White 
      Cmbr.Enabled = True 

     Case Else 
      MsgBox("You must enter a colour choice from the third option box!") 

    End Select 

      If NumberOfZeros.length > 3 Then 
       NumberOfZeros.Remove(0, NumberOfZeros.Length - 3) 
      End If 
End Sub 
+4

У меня есть подозрение, что если бы вы разместили больше контекста, мы могли бы заменить весь ваш сложный оператор CASE простым строковым выражением однострочного формата или, возможно, математическим вычислением для аргумента для перегрузки конструктора правых строк. Не могли бы вы обновить вопрос с помощью полного контекста и кода CASE? –

+0

Конечно! Всего одна секунда. –

ответ

0

Прежде всего, возвращая различное количество нулей в этом случае-структуре звучит немного странно, почему бы не использовать разные номера или битовые флаги для различных условий?

Есть NumberOfZeros.length опечатка в SO-msg, или настоящий код? Не должно быть NumberOfZeros.Length?

+0

Это была опечатка. В коде это .Length Случай необходим, как и для конкретной письменной задачи на моем компьютерном курсе! Это кажется глупым, как я бы этого не делал. –

+0

Хм, вы написали, что «очевидно» это не сработало. Не могли бы вы объяснить, почему вы пришли к выводу, что это не сработало? (У меня есть подозрение, что некоторые из следующих кодов могут быть ошибочными ...) – MBaas

+0

MBaas, когда я вывожу переменную NumberOfZeros, она сделала пустую строку. –

1

Некоторые вещи, чтобы рассмотреть следующие вопросы:

класс, представляющий собой полосу будет пройти долгий путь к конденсации код:

Public Class Stripe 
    Public colour As Color 
    Public value As Int64 
    Public name As String 
    Sub New(_colour As Color, _value As Int64, _name As String) 
     colour = _colour 
     value = _value 
     name = _name 
    End Sub 
    Public Overrides Function ToString() As String 
     Return name 
    End Function 
End Class 

Создание списка этого класса и присвоения его источника данных по имуществу combobox заполнит его.

Public stripes As New List(Of Stripe) 
Public Sub New() 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 
    stripes.AddRange(
     { 
     New Stripe(Color.Black, 1, "Black"), 
     New Stripe(Color.Brown, 10, "Brown"), 
     New Stripe(Color.Red, 100, "Red"), 
     New Stripe(Color.Orange, 1000, "Orange"), 
     New Stripe(Color.Yellow, 10000, "Yellow"), 
     New Stripe(Color.Green, 100000, "Green"), 
     New Stripe(Color.Blue, 1000000, "Blue"), 
     New Stripe(Color.DarkViolet, 10000000, "Violet"), 
     New Stripe(Color.Gray, 100000000, "Grey"), 
     New Stripe(Color.White, 1000000000, "White") 
     }) 
    cmbl3.DataSource = stripes 
End Sub 

Теперь получать значения из SelectedItem простой вопрос преобразования его обратно в полоску объекта:

Private Sub cmbl3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbl3.SelectedIndexChanged 
    Dim selectedStripe As Stripe = DirectCast(cmbl3.SelectedItem, Stripe) 
    lblcolour3.BackColor = selectedStripe.colour 
    'This assumes you have a label named lblvalue3 to display the value 
    If selectedStripe.value < 1000 Then 
     lblvalue3.Text = selectedStripe.value.ToString 
    Else 
     lblvalue3.Text = (selectedStripe.value/1000).ToString & "K" 
    End If 
End Sub 

Поскольку вы будете нуждаться код для различных диапазонов на резисторе вы код будет в конечном итоге гораздо более кратким.

Смежные вопросы