Form bezárása Validating nélkül

Fórumok

Sziasztok!

A főiskolai képzés keretein belül fejlesztünk (félig a gyakorlaton, félig otthon) egy alkalmazást Visual C++-ban. Ezzel kapcsolatban némi problémába ütköztünk, a tanár sem tudott megoldást nyújtani.

Adott egy form, rajta egy textbox és két gomb. A buttonOk megnyomására ellenőrizni kellene, hogy a textboxban megadott string szerepel-e egy adott fájlban, illetve hogy nem-e 0 karakter hosszúságú. A hibajelzésre az errorprovidert használjuk, azonban van egy kis probléma. A validálás során megadott feltétel-vizsgálatok lefutnak a buttonBezar esetén is, amit nem sikerült kikerülnünk.

A teljes kód itt olvasható:
http://pastebin.ubuntu.com/584939/
(a kód tartalmaz olyan elemeket, melyek feleslegesek lehetnek, pl. a MegseClick adattag, melyet én iktattam be a hiba kiküszöbölésére - nulla sikerrel)
http://pastebin.ubuntu.com/584955/

Hogyan lehetne ezt a problémát megoldani?

Hozzászólások

Mi van akkor, ha nem a componentsre raksz errorprovidert, hanem csak a buttonra?
Nem vagom ezt az ms dialektust, de ugy tunik, hogy a components minden elemere ervenyes a validacio.

--
A gyors gondolat többet ér, mint a gyors mozdulat.

Közben észrevettem két dolgot:

1) Az elsőnek linkelt kód rosszul működik, ez a próbálkozások egy vakvágányát mutatja. Ezt futtatva sehogy sem ad hibát.
A "tiszta" kód ez: http://pastebin.ubuntu.com/584955/

2) Az ablak fejlécében található bezárás gombbal minden ellenőrzés nélkül bezáródik a form. Nem lehetne az a rendszerhívást kiváltani, amit az a gomb hív?
Persze nem túl elegáns, de egy megoldásnak megtenné.

Nem ismerem a .NET-es C++-t de ha az == operátor megfelelően van felülbírálva akkor:


private: System::Void uj_telepules_Validating(System::Object^  sender, System::ComponentModel::CancelEventArgs^  e) 
{
	if (sender == buttonOk)
	{
		StreamReader^ sr;
		String^ errorMsg;
		bool vanHiba=false;
		try
		{
			if(textUjVaros->Text->Length == 0 )
			{
				vanHiba=true;
				errorMsg="A település nevének kitöltése kötelező, a folyamat megszakításához nyomja meg a Cancel gombot!";
			}

			sr = gcnew StreamReader("varosok.txt");

			String^ line;
			while ((line = sr->ReadLine()) != nullptr)
			{
				if(line==textUjVaros->Text)
				{
					vanHiba=true;
					errorMsg="A település már szerepel a listán!";
				}
			}
			sr->Close();
			if(vanHiba)
			{
				e->Cancel = true;
				textUjVaros->Select( 0, textUjVaros->Text->Length );
				this->errorProvider1->SetError( textUjVaros, errorMsg );
			}
		}
		catch (Exception^ e)
		{
			 MessageBox::Show(e->Message);
		}
		finally
		{
			 if(sr)
				 sr->Close();
		}
	}
}