The way I would do it is to start by separating your concerns.
Start by removing all reverences to controls and other UI elements from your "Add Animal" method and pass in the appropriate data as parameters. Then return the Animal object from the method when you have created it.
So your method would become
private Animal AddAnimal( string animalName, Category category)
{
...
That way, you are separating stuff that changes a lot (the UI) from stuff that doesn't change much (Animals)
Then, I'd look at creating an Abstract Animal class, and deriving categories from that, such as Mammal, Reptile, and so on. Possibly, you will want to make those abstract as well and derive Feline, Bovine, etc from Mammal - but that may be for later.
That way, you can start decomplicating your constructor:
private Animal AddAnimal( string animalName, Category category)
{
switch (category)
{
case Category.Mammal: return new Mammal(animalName);
case Category.Reptile: return new Reptile(animalName);
...
Does that make sense, or is it a bit further than your course has got yet?