Your code is very strange, but, in fact, it will work, and the statements in the finally clause will execute. Put a break-point in the finally clause, deliberately produce an error, and watch what happens when you execute and single-step through the code.
I'd suggest you use
Control.Focus();
Control.Capture = true;
To make sure the Control you wish to active is selected/focused, etc.
When textBoxPlace has no string content, you over-ride the Focus you set on textBoxID by setting the Focus to textBoxPlace.
I suggest you use the Int32.TryParse method to test for the presence of a valid integer; here's an idea you can experiment with:
int Id;
string InsertedPlace = "";
if (Int32.TryParse(textBoxID.Text, out Id))
{
if (textBoxPlace.Text != String.Empty)
{
return;
}
}
else
{
}
The idea of "validation" is to check for errors as soon as possible; relying on the 'finally clause of a try-catch to handle invalid input data is not a good code-practice.