0

「ばか」な質問でごめんなさい。リストボックスのtxtboxから値を取得できません。リストボックスに「07650」が表示されるようになりましたが、76,50 であるはずです...

formatdecimal という関数があります。テキストファイルを保存(保存ボタン)すると(.txtに)、値は「07650」として保存する必要があります。それ以外の場合は、リストボックスで「76,50」のように指定する必要があります...

誰かが私を助けることができますか?

` Public Function FormatDecimal(ByVal perc As Decimal) As String

    Return (perc * 100).ToString("00000")

End Function` (Source code for the function)

以下は追加ボタンのソースコードです...

    Private Sub btnToevoegen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnToevoegen.Click (add button)
    Dim line As String = ""
    Dim number As Integer
    Dim name As String = ""
    Dim Birthday As Integer
    Dim prompt As String
    Dim title As String = "FAILURE"
    Dim perc As Decimal


    If Not CheckLeegtextvak() Then
        MessageBox.Show("Give a value in the textbox", "FAILURE", MessageBoxButtons.OK) 
        Return
    End If (check if the textboxes are empty)

    'If defaultvalues are okay then do something.
    If Not checkdefaultwaarde() Then
        prompt = "Select a value in the combobox."
        MessageBox.Show(prompt, title, MessageBoxButtons.OK)
        Return
    End If (check if defaultvalues are okay (beginning of the file)

    CheckLengteNaam() (check the length of the name)

    number = CInt(txtNumber.Text)
    name = CStr(txtName.Text)
    Birthday = CInt(txtBirthday.Text)
    perc = CDec(txtPercentage.Text)


    line = combobox1.SelectedItem.ToString.PadRight(1) & number.ToString.PadRight(5) & name.ToString.PadLeft(5) & birthday.ToString.PadRight(5) & perc.ToString.PadLeft(5)

lstOutput.Items.Add(行)

    FormatDecimal(perc)

End Sub

レコードを追加するとき、perc の値は 76.50 でなければなりません。フォームを txtfile に保存するとき、値は 07650 である必要があります (これが関数の目的です) が、正しい値が保存されません。「76,50」を節約します。

保存してコードとして保存...

Private Sub mnuBestandOpslaan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuBestandOpslaan.Click (This is the save button)
    Dim index As Integer
    Dim perc As Decimal

    'Zoeken naar opgegeven map om bestand in op te slaan onder dezelfde naam.
    If dlgOpen.FileName = "" Then
        mnuSavefileAs_Click(sender, e)
    Else
        FileOpen(1, dlgOpen.FileName, OpenMode.Output)
        For index = 0 To lstOutput.Items.Count - 1
            PrintLine(1, lstOutput.Items(index))
        Next
        FileClose(1)
    End If

    FormatDecimal(perc)
End Sub

Private Sub mnuBestandOpslaanAls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuBestandOpslaanAls.Click (This is the save as button) 
    Dim index As Integer
    Dim perc As Decimal

    'Search folder to save file.
    With dlgSave
        .InitialDirectory = "C:\My Documents"
        .Filter = "tekstbestanden (*.txt) | *.txt"
        .Title = "Save as"
    End With

    'Save file.
    If dlgSave.ShowDialog = DialogResult.OK Then
        FileOpen(1, dlgSave.FileName, OpenMode.Output)
        For index = 0 To lstOutput.Items.Count - 1
            PrintLine(1, lstOutput.Items(index))
        Next
        FileClose(1)
    End If


    FormatDecimal(perc)
End Sub

数値として指定できる最大値は 100% のように 100 です...

4

1 に答える 1

0

FormatDecimal(perc)ええと... を単独で呼び出しても、実際には何も役に立ちません。私は変数を変更せず、フォーマットを制御しません。

ListBox に STRING を保存しているため、ファイルに出力するときに、その中の何かの形式を変更することが難しくなります。より良い方法は、これらの値を保持する CLASS を作成し、その ToString() 関数をオーバーライドして、ListBox に正しく表示されるようにすることです。これで、そのクラスのインスタンスを ListBox に追加できます。印刷するときは、クラス インスタンスの個々の値を必要に応じてフォーマットできます。

編集:これが私が意味することの例です...

まず、クラスをプロジェクトに追加します。

Public Class MyData

    Public number As Integer
    Public name As String
    Public Birthday As Integer
    Public perc As Decimal
    Public comboBoxValue As String

    ' This will be used by the ListBox:
    Public Overrides Function ToString() As String
        Return comboBoxValue & number.ToString.PadRight(5) & name.PadLeft(5) & Birthday.ToString.PadRight(5) & perc.ToString.PadLeft(5)
    End Function

    Public Function ToStringForPrinter() As String
        Return comboBoxValue & number.ToString.PadRight(5) & name.PadLeft(5) & Birthday.ToString.PadRight(5) & (perc * 100).ToString("00000")
    End Function

End Class

コンボボックス 1 が何を表しているのかわからないので、それに応じて名前を変更し、それにアクセスする以下のコードを更新する必要があります。

次に、リスト ボックスに項目を追加するときは、次のように変更します。

    number = CInt(txtNumber.Text)
    Name = CStr(txtName.Text)
    Birthday = CInt(txtBirthday.Text)
    perc = CDec(txtPercentage.Text)
    line = combobox1.SelectedItem.ToString.PadRight(1) & number.ToString.PadRight(5) & Name.ToString.PadLeft(5) & birthday.ToString.PadRight(5) & perc.ToString.PadLeft(5)
    lstOutput.Items.Add(line)

MyData のインスタンスを作成し、それを ListBox に追加します (以前の文字列ではなく)。

    Dim data As New MyData
    data.comboBoxValue = combobox1.SelectedItem.ToString.PadRight(1)
    data.number = CInt(txtNumber.Text)
    data.name = txtName.Text
    data.Birthday = CInt(txtBirthday.Text)
    data.perc = CDec(txtPercentage.Text)
    lstOutput.Items.Add(data)

最後に、印刷するときは、次のように変更します。

    FileOpen(1, dlgOpen.FileName, OpenMode.Output)
    For index = 0 To lstOutput.Items.Count - 1
        PrintLine(1, lstOutput.Items(index))
    Next
    FileClose(1)

もっと似たものに:

    FileOpen(1, dlgOpen.FileName, OpenMode.Output)
    For Each data As MyData In lstOutput.Items
        PrintLine(1, data.ToStringForPrinter)
    Next
    FileClose(1)
于 2013-06-08T14:35:04.540 に答える