如何从文本文件中的组合框中删除所选项目

时间:2016-06-28 09:54:41

标签: c# winforms combobox text-files removeclass

因此我的组合框中的列表来自文本文件。该程序允许用户从组合框中选择一个项目。所选项目应从组合框中删除,也可以通过单击按钮从文本文件中删除。

此代码允许程序将文本文件中的项目提取到我的组合框:

string location = @"C:\\Users\\LMCPENA98\\Desktop\\COE114LPROJECT_MILLENNIUM_PAWS\\MillenniumPaws\\MillenniumPaws\\bin\\Debug\\Files.txt";
string[] temp = File.ReadAllLines(location);
int[] TagNumber = new int[temp.Length];
string[] Breed = new string[temp.Length];
string[] Name = new string[temp.Length];
decimal[] Price = new decimal[temp.Length];
//Getting all the values i the text file
for (int i = 0; i < TagNumber.Length; i++)
{
TagNumber[i] = int.Parse(temp[i].Substring(0, temp[i].IndexOf("-")));
Breed[i] = temp[i].Substring(0, temp[i].IndexOf("+"));
Breed[i] = Breed[i].Substring(Breed[i].LastIndexOf("-") + 1);
Name[i] = temp[i].Substring(0, temp[i].IndexOf("="));
Name[i] = Name[i].Substring(Name[i].LastIndexOf("+") + 1);
Price[i] = decimal.Parse(temp[i].Substring(temp[i].LastIndexOf("=") + 1));
}

Pound p;
for (int i = 0; i < Breed.Length; i++)
{
if (Breed[i] == cmbBx_breed.Text)
 {
  p = new Pound(TagNumber[i], Name[i], Price[i]);
  cmbBx_opts.Items.Add(p.GetEntry());
  }
 }
}
else
{
cmbBx_breed.Text = null;
}

这就是我让程序知道我选择了一个项目的方式:

private void btn_buy_Click(object sender, EventArgs e)
{
    new MessageBox_TYBuying().Show();
    cmbBx_opts.Items.Remove(cmbBx_opts.SelectedItem);
}

所以当我开始编程时,组合框中的所选项目现在被删除,但不会删除文本文件。我该怎么办?

2 个答案:

答案 0 :(得分:0)

没有“从文本文件中删除一行”这样的事情。你所能做的就是:

方法1)
打开原始文件,将所有行读入List<string>。然后,遍历所有这些列表条目并删除需要删除的列表条目。然后,将所有列表条目写回文件。

方法2)
将原始文件重命名为某个“备份”文件。打开备份文件以进行读取,并打开具有原始文件名的新文件以进行写入。逐行读取备份文件。将每一行写入输出文件,而不是要删除的行。

答案 1 :(得分:0)

C ++ Win32解决方案

char deleteCharArray[50];
int index = SendDlgItemMessageA(hDlg, ID_COMBOFILE, CB_GETCURSEL, 0, 0);
SendDlgItemMessageA(hDlg, ID_COMBOFILE, CB_GETLBTEXT, index, (LPARAM)deleteCharArray);
SendDlgItemMessageA(hDlg, ID_COMBOFILE, CB_DELETESTRING, index, 0);
    
vector<string> dataArray;
ifstream myFile("fileName.txt");
     
string line;
while (getline(myFile, line))
{
    dataArray.push_back(line);
}
     
string deleteThis = string(deleteCharArray);
     
for (auto it = dataArray.begin(); it != dataArray.end(); ++it)
{
    if (deleteThis == *it)
    {
        dataArray.erase(it);
        break;
    }
}
     
ofstream outFile("fileName.txt");
ostream_iterator<std::string> output_iterator(outFile, "\n");
copy(dataArray.begin(), dataArray.end(), output_iterator);