在c#中处理多个文件

本文关键字:文件 处理 | 更新日期: 2023-09-27 18:18:15

我面临一个特殊的问题。我有一个按钮,当点击时,会导致点击事件打开文件对话框选择文件。该文件的名称(SafeFileName)将在组合框中显示。然后读取该文件的前9行,并将它们存储为以下类型的结构体:

public struct DCM_INFO 
{
    public string FILE_NAME;  
    public string FILE_PATH;             
    public string VERSION;
    public string NAME;
    public string DATE;             
    public string BOX;
    public string SERIAL_NUM;
    public string SERIES;
    public string POINT;
    public string NOTE;
    public string VARIANT;     
}

前两个字符串是"SafeFileName""FileName"。这个结构体然后显示在ListView中。

现在我想做的是:在我打开第二个文件与完全相同的按钮单击事件后,我想添加第二个"SafeFileName"到组合框,并使其可见(显示在顶部),然后将数据保存在DCM_INFO结构中的文件与第一个不同的名称。在此之后,如果我选择不同的文件,而不是主动显示在组合框中,listview将从DCM_INFO结构体中更新足够的数据。我已经找出了组合框(显示活动文件)的部分,但如何正确地切换列表视图之间?

在c#中处理多个文件

您可以覆盖结构体中的ToString方法,并将该结构体直接添加到组合框中。在ComboBox的selectionchangecomcommitted事件中,你可以提取项目(将其转换回结构体)并创建适当的listviewitem,然后将其添加到你的ListView(在清除ListViews Items集合后)

public struct DCM_INFO
{
    public string FILE_NAME;
    public string FILE_PATH;
    public string VERSION;
    public string NAME;
    public string DATE;
    public string BOX;
    public string SERIAL_NUM;
    public string SERIES;
    public string POINT;
    public string NOTE;
    public string VARIANT;
    public override string ToString()
    {
        return FILE_NAME;
    }
}
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (this.comboBox1.SelectedItem != null)
        {
            DCM_INFO item = (DCM_INFO)this.comboBox1.SelectedItem;
            // Create ListViewItems and add them to ListView
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        DialogResult ret = ofd.ShowDialog();
        if (ret == System.Windows.Forms.DialogResult.OK)
        {
            DCM_INFO tmp = new DCM_INFO();
            // read file and fill struct
            this.comboBox1.Items.Add(tmp);
        }
    }
}