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