在C#中使用多个文件

时间:2013-06-14 07:15:33

标签: c# listview file-io struct

我面临特殊问题。 我有一个按钮,单击该按钮将导致单击事件打开文件对话框以选择文件。该文件的名称(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结构中的文件中的数据。在此之后,如果我选择的文件不同于在组合框中主动显示的文件,则将使用DCM_INFO结构中的足够数据更新列表视图。 我已经找到了组件框(显示活动文件),但如何在列表视图之间正确切换?

1 个答案:

答案 0 :(得分:1)

您可以覆盖结构中的ToString方法,并将结构直接添加到组合框中。在ComboBox的SelectionCheangeCommited事件中,您可以提取项目(将其强制转换回结构)并创建相应的ListViewItems,然后将其添加到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);
        }
    }
}