-3

我面临着特殊的问题。我有一个按钮,单击该按钮会导致单击事件打开文件对话框以选择文件。此文件的名称 (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"and "FileName"。这个结构然后显示在 ListView 中。

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

4

1 回答 1

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);
        }
    }
}
于 2013-06-14T07:24:14.800 回答