2016-12-16 7 views
-3

この関数はagrsとして渡されるByte()の汎用リストを必要とします。このリストに追加するものは何も得られないようです。printdata(0)& (1)それに追加する。リストに追加する(Byte())

Dim printdata(1) As String 


labelname = "WasNow" 

printdata(0) = "9,99" 
printdata(1) = "6.99" 

Dim args = New List(Of Byte()) 

args.Add(Convert.ToByte(printdata)) 


ApplicationContext.CurrentDevice.Printer.Print(labelname, 1, args) 
Frmscanprint.Show() 

これは、追加するアイテムが1つのみのコードの動作中のC#バージョンです。

private void printButton_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      this.printNumber++; 
      var args = new List<byte[]>() { Encoding.ASCII.GetBytes(string.Format(CultureInfo.InvariantCulture, "Test #{0}", this.printNumber)) }; 
      if (!ApplicationContext.AllDevicesSelected) 
      { 
       ApplicationContext.CurrentDevice.Printer.Print("SamplePrint", 1, args); 
      } 
      else 
      { 
       PrintSampleForEachDevice("SamplePrint", 1, args); 
      } 
     } 
    } 
+1

VBが文字列形式の数値を変換しようとしているときにC#が文字列を変換していますが、これは2つの異なることです。 Convert.ToByteは配列をとらない。実際の数字を文字列形式に変換する場合は、9,99と6.99が2つの異なる形式(ドットとカンマ)であるため、適切に文化を設定する必要があります。たぶんVBでEncoding.ASCII.GetBytesを使用しようとしました –

答えて

1

ここで指定したC#の例では、1つの文字列を取得してバイト配列に変換し、この配列を新しく作成されたリストに割り当てます。

あなたのコードは同じことをしていません。文字列配列をバイト配列に変換しようとしています。この変換タイプは、使用しようとしているメソッドでは許可されていません。たとえ可能であっても、結果はバイト配列の配列ではなく内容全体を含む1バイト配列になります。

C#コードと同じことをしたい場合は、文字列配列からそれぞれのitmに対して1回ずつ実行します。

C#コードと同じことをしたい場合は、文字列配列の各項目に対してshoudを実行します。例:

For Each item As String In printdata 
     args.Add(Encoding.ASCII.GetBytes(item)) 
    Next 
+0

あなたのおかげでありがとう、これは私が持っていた問題を修正しました。 – user2186810

関連する問題