You need to shift all elements past the one to be deleted. Currently you only shift the first, which leaves you with something not quite what you wanted. Compare with this, which deletes the first occurrence of the selected value:
main returns int. C++ doesn't support implicit int. I don't care what your compiler allows. Do it correctly so I don't have to modify your code before it'll compile on anything but Turbo C and Visual C++ 6.
Don't just copy boilerplate code. If you don't understand it, you end up with ridiculous patterns like this one:
// Don't try to compile me outside of Turbo C
// I don't care about any programs that ran before me
// But it's cool because I can't decide whether I own the window or not
/* Your code here */
// Yay for zero portability!
// I'm probably annoying and unnecessary
// I can't decide whether I own the window or not
 For those wondering, it's only necessary to pause for input when the window is closed upon termination. This typically only happens when the window is created for the program's process (ie. double clicky or running from some IDEs), in which case there's no previous output to clear with clrscr. Thus having both clrscr at the beginning and getch at the end is nonsensical; it suggests complete lack of understanding of one's code.
For Each ctrl As Control In Me.Controls("pnlMainPanel").Controls
If ctrl.GetType Is GetType(System.Windows.Forms.Panel) Then
For Each subCtrl As Control In ctrl.Controls
If subCtrl.GetType Is GetType(System.Windows.Forms.TextBox) Then
If subCtrl.GetType Is ...