3

次のコードがあり、リストボックス内に子を持つスタックパネルを動的に作成しました。スタック パネルの子の値は、テキスト ボックスのエントリから取得されます

ただし、各子の値をテキストまたはxmlファイルに保存して、フォームロードイベントから読み取ることができるかどうか疑問に思っています.

通常のリストボックス項目に項目を追加して、テキストフライから保存およびロードする方法を知っています。だから、スタックパネルの子の値にも同じ手順を実行したかったのです。

次のコードに従って、最後のテキストボックスエントリを上書きします

たとえば、テキスト ボックスにテキストを追加してボタンを押すと、スタック パネルの子に追加され、ファイルに保存されます。しかし、もう一度テキストを入力すると、保存ファイルの日付が上書きされます。

テキスト ボックス エントリの数を表示する代わりに、最後のテキスト値のみを表示します。

私はデータバインディングについての知識が少ないので、データベースを使用したくなく、各子の値をファイルに保存したいだけです。

皆さんが私を助けてくれることを願っています。ありがとうございました!!

ここに私のコードがあります

クラス MainWindow

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
    Dim st As New StackPanel()
    Dim tb As New Label()

    tb.Content = TextBox1.Text

    st.HorizontalAlignment = Windows.HorizontalAlignment.Left
    'st.Height = 40
    'st.Width = 40
    'st.Margin = New Thickness(45, 45, 45, 0)

    Me.ListBox1.Items.Add(st)
    st.Children.Add(tb)



    IO.Directory.CreateDirectory("D:\save")
    Dim w As New IO.StreamWriter("D:\save\test.text")

    ' Dim i As Integer

    For Each tb In st.Children
        w.WriteLine(tb.Content)

    Next


    w.Close()
End Sub

クラス終了

ここに私のxmalコードがあります

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="509" Width="762">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="320*" />
        <ColumnDefinition Width="420*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="49*" />
        <RowDefinition Height="262*" />
    </Grid.RowDefinitions>
    <TextBox Height="25" HorizontalAlignment="Left" Margin="59,244,0,0" Name="TextBox1" VerticalAlignment="Top" Width="121" Grid.Row="1" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="59,275,0,0" Name="TextBox2" VerticalAlignment="Top" Width="121" Grid.Row="1" />
    <Button Content="Button" Height="24" HorizontalAlignment="Left" Margin="77,308,0,0" Name="Button1" VerticalAlignment="Top" Width="83" Grid.Row="1" />
    <Label Content="Label" Grid.Column="1" Height="29" HorizontalAlignment="Left" Margin="38,12,0,0" Name="Label1" VerticalAlignment="Top" Width="120" DataContext="{Binding}" Visibility="Hidden" />
    <ListBox Height="297" HorizontalAlignment="Left" Margin="12,12,0,0" Name="ListBox1" VerticalAlignment="Top" Width="294" Grid.RowSpan="10" FontSize="14" FontStretch="Expanded" MinHeight="10"></ListBox>
</Grid>

4

1 に答える 1

2

オーバーロードされたStreamWriterコンストラクターを使用し、追加することを指定する必要があります。

Dim w As New IO.StreamWriter("D:\save\test.text",True)

そうしないと、ファイルが上書きされます:

ファイルにデータを追加する場合は true 。ファイルを上書きする場合は false。指定されたファイルが存在しない場合、このパラメーターは効果がなく、コンストラクターは新しいファイルを作成します。

于 2013-02-14T15:53:03.817 に答える