2013-07-04 145 views
0

在Form1中,我有2個文本框(姓氏和名稱)。當我按下「註冊」按鈕時,我通過TextWriter將它們寫入文件。每行包含姓和名,所以每行有2個字段。編輯文件內容

在窗體2我要問的參數進行編輯。例如在Form2中,我有一個TextBox。如果我在文本框中鍵入的姓氏等於我的文件中的姓氏,我想在Form1中的正確文本框中顯示姓氏和名稱,並且在編輯姓氏或名稱後,我想通過按「寄存器「按鈕。

由於用戶Medinoc我寫的文件是這樣的:

ref class MyClass 
{ 
public: 
    String^ cognome; 
    String^ nome; 
}; 

//... 

List<MyClass^>^ primo = gcnew List<MyClass^>(); 

//... 

MyClass^ myObj = gcnew MyClass(); 
myObj->cognome = textBox1->Text; 
myObj->nome = textBox2->Text; 
primo->Add(myObj); 

//... 

TextWriter ^tw = gcnew StreamWriter(L"primoAnno.txt", true); 
for each(MyClass^ obj in primo) 
{ 
    //You can use any character or string as separator, 
    //as long as it's not supposed to appear in the strings. 
    //Here, I used pipes. 
    tw->Write(obj->cognome); 
    tw->Write(L"|"); 
    tw->Write(obj->nome); 
} 
tw->Close(); 

閱讀

MyClass^ ParseMyClass(String^ line) 
{ 
    array<String^>^ splitString = line->Split(L'|'); 
    MyClass^ myObj = gcnew MyClass(); 
    myObj->cognome = splitString[0]; 
    myObj->nome = splitString[1]; 
    return myObj; 
} 

希望我是很清晰。我不是英格蘭人。 在此先感謝!

回答

0

它仍然是經典的文本文件編輯行爲:

你需要做的是搜索文件在特定線路上的功能;和另一個修改特定行的功能。那一個將類似於the deleting code

查找:

MyClass^ FindMyClass(String^ surnameToFind) 
{ 
    MyClass^ found = nullptr; 
    TextReader^ tr = gcnew StreamReader(L"primoAnno.txt"); 
    String^ line; 
    while(found == nullptr && (line=tr->ReadLine()) != nullptr) 
    { 
     MyClass^ obj = ParseMyClass(line); 
     if(obj->cognome == surnameToFind) 
      found = surnameToFind; 
    } 
    tr->Close(); 
} 

更新:

MyClass^ objToUpdate = gcnew MyClass; 
objToUpdate->cognome = textBox1->Text; 
objToUpdate->nome = textBox2->Text; 

TextWriter^ tw = gcnew StreamWriter(L"primoAnno2.txt", true); 
TextReader^ tr = gcnew StreamReader(L"primoAnno.txt"); 
String^ line; 
bool updated = false; 
while((line=tr->ReadLine()) != nullptr) 
{ 
    MyClass^ obj = ParseMyClass(line); 
    if(obj->cognome == objToUpdate->cognome) 
    { 
     line = objToUpdate->cognome + L"|" + objToUpdate->nome; 
     updated = true; 
    } 
    tw->WriteLine(line); 
} 
//If the surname was not in the file at all, add it. 
if(!updated) 
{ 
    line = objToUpdate->cognome + L"|" + objToUpdate->nome; 
    tw->WriteLine(line); 
} 
tr->Close(); 
tw->Close(); 
File::Delete(L"primoAnno.txt"); 
File::Move(L"primoAnno2.txt", L"primoAnno.txt"); 
+0

我需要嘗試它。但是我不確定大約一個thing.from編輯表單代碼應顯示以前的 「cognome」 和「諾姆」在登記的文本框form.i猜測該代碼不會做it.so我問你,我怎麼可以從窗口2管理form1的文本框?例如//form2.cpp的myproject :: form1-> textBox1->文本= OBJ - > cognome?謝謝 – gAeT

+0

我想它是在FileDialog中完成的相同方式:在表單關閉後可用的操作。 – Medinoc

+0

你可以舉個例子嗎?非常感謝你! – gAeT