如何解决如何使用 WPF 在 listBox.clear() 之后在 listBox 中显示条目?
我是 C# 新手,我正在尝试创建一个库存管理系统。
我设法让程序运行的方法是用样本名称和相应的存储箱填充两个列表框。通过单击“将样本添加到存储”按钮,它将两个列表项保存在数组或向量中(我不知道这是什么,我只知道 Python 的语法)并将其添加到现有的 txt 文件中。然后它会清除 listBoxes 以确保我正确保存了新样本及其存储箱。
我的问题:
我希望显示列表框中的项目。由于 listBox.clear(),这不会发生。你知道一种方法吗?
感谢您的帮助。
MainWindow.xaml
<Window x:Class="OMD_Inventory_Management_System.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:OMD_Inventory_Management_System"
mc:Ignorable="d"
Title="OMD Inventory Management System" Height="450" Width="800">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListBox Grid.Row="1" Grid.Column="0" x:Name="lstSample" />
<ListBox Grid.Row="1" Grid.Column="1" x:Name="lstBin" />
<StackPanel Grid.Row="1" Grid.Column="2" Margin="5,0">
<Label>Sample name:</Label>
<TextBox x:Name="txtSampleName" />
<Label>Storage bin:</Label>
<TextBox x:Name="txtStorageBin" />
<Button x:Name="Button" Margin="0,5,0" Click="ButtonAddName_Click">Add sample to storage</Button>
</StackPanel>
</Grid>
</Window>
MainWindow.xaml.cs*
using System.Threading.Tasks;
using System.Windows;
using System.IO;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace OMD_Inventory_Management_System
{
public partial class MainWindow : Window
{
private void ButtonAddName_Click(object sender,RoutedEventArgs e)
{
if (!string.IsNullOrWhiteSpace(txtSampleName.Text) & !string.IsNullOrWhiteSpace(txtStorageBin.Text))
lstSample.Items.Add(txtSampleName.Text);
if (!string.IsNullOrWhiteSpace(txtSampleName.Text) & !string.IsNullOrWhiteSpace(txtStorageBin.Text))
lstBin.Items.Add(txtStorageBin.Text);
using (StreamWriter outputFile = File.AppendText("Inventory.txt"))
{ outputFile.WriteLine((lstSample.Items[0],lstBin.Items[0]).ToString()); }
lstSample.Items.Clear();
lstBin.Items.Clear();
}
}
}
解决方法
MainWindow.xaml
<Window x:Class="OMD_Inventory_Management_System.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:OMD_Inventory_Management_System"
mc:Ignorable="d"
Title="OMD Inventory Management System" Height="450" Width="800">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListBox Grid.Row="1" Grid.Column="0" x:Name="lstSample" />
<ListBox Grid.Row="1" Grid.Column="1" x:Name="lstBin" />
<StackPanel Grid.Row="1" Grid.Column="2" Margin="5,0">
<Label>Sample name:</Label>
<TextBox x:Name="txtSampleName" />
<Label>Storage bin:</Label>
<TextBox x:Name="txtStorageBin" />
<Button x:Name="Button" Margin="0,5,0" Click="ButtonAddName_Click">Add sample to storage</Button>
<Button x:Name="Button1" Margin="0,0" Click="ButtonView_Click">View</Button>
<Button x:Name="Button2" Margin="0,0" Click="ButtonClean_Click">Clean</Button>
<Button x:Name="Button3" Margin="0,0" Click="ButtonDel_Click">Delete All</Button>
</StackPanel>
</Grid>
MainWindow.xaml.cs
using System;
using System.IO;
using System.Windows;
namespace OMD_Inventory_Management_System
{
public partial class MainWindow : Window
{
private void ButtonAddName_Click(object sender,RoutedEventArgs e)
{
bool error = false;
if (!string.IsNullOrWhiteSpace(txtSampleName.Text) & !string.IsNullOrWhiteSpace(txtStorageBin.Text))
{
lstSample.Items.Add(txtSampleName.Text);
}
else { error = true; }
if (!string.IsNullOrWhiteSpace(txtSampleName.Text) & !string.IsNullOrWhiteSpace(txtStorageBin.Text))
{
lstBin.Items.Add(txtStorageBin.Text);
}
else { error = true; }
if (error)
{
MessageBox.Show("Error!");
return;
}
try
{
//save temp txtbox
ExampleAsync(txtSampleName.Text,txtStorageBin.Text,true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//Clean listbox////
lstSample.Items.Clear();
lstBin.Items.Clear();
////////////////////////////
//if you want show temp txtbox in a list
//ExampleAsync(null,null,false);
}
private void ButtonView_Click(object sender,RoutedEventArgs e)
{
ExampleAsync(null,false);
}
private void ButtonClean_Click(object sender,RoutedEventArgs e)
{
lstSample.Items.Clear();
lstBin.Items.Clear();
}
private void ButtonDel_Click(object sender,RoutedEventArgs e)
{
File.Create("Inventory.txt").Close();
lstSample.Items.Clear();
lstBin.Items.Clear();
}
public void ExampleAsync(string _txtSampleName,string _txtStorageBin,bool _temp)
{
if (_temp)
{
string lines = _txtSampleName + "\n" + _txtStorageBin + "\n";
File.AppendAllText("Inventory.txt",lines);
txtSampleName.Text = String.Empty;
txtStorageBin.Text = String.Empty;
}
else
{
string text = System.IO.File.ReadAllText("Inventory.txt");
int counter = 1;
string line;
System.IO.StreamReader file =
new System.IO.StreamReader("Inventory.txt");
while ((line = file.ReadLine()) != null)
{
counter++;
if (counter == 2)
{
lstSample.Items.Add(line);
}
else
{
lstBin.Items.Add(line);
counter = 1;
}
}
file.Close();
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。