Cast inside the method or let the client code cast, which one is better?
In my opinion the generic method is better for two reasons. First, it's cleaner, both for the client calling it because they don't have to cast and for the process of casting because it is only done in one place. Secondly, the client that's asking for the control knows the type of the control in this instance so it's very sensible, and good practice, to have the client specify that rather than sending back an object just so the client has to cast it. That's why generics exist. 

However, I recommend in your code in the method you use the as operator rather than a cast because even though the client calling you specified the type, the as operator will simply return null instead of throwing an exception.