Based on my SF/.NET experience thus far...
When loading the BO with a fill method, which event is the best one to use
ParentFormLoading is usually the best. You can use the InitializationPriority to set the order the various BO/lists are loaded. These happen before the form's Load event, so if you need code that depends on loaded lists/BOs, you can then put it in the form Load and you're good to go. I also find that this keeps the code more organized, when dealing with forms with lots of BOs. You then have a small focused method for each BO, rather than a complicated one in the form Load handler.
Is this the correct method to use to fill a child BO?
Well, correct is a strong word. Correct is very dependent on your situation. However, typically, you can use FillByParent or the FillByParentPrimaryKey method. If you use the FillByParent, you can also set the parent BO instance on the child and skip passing the parent BO, which might be easier. I tend use the FillByParentPrimaryKey, but I'm not going to say this is the way it should be done. I tend to have a database point of view (thus think in terms of PKs), rather than objects. I wouldn't be surprised if this changes as I grow more as .NET programmer.
Is this the correct way since the data in the ListView represent a child BO?
This depends on what you are doing on the form. If the child data is only represented on the form via the ListView, then this seems fine (and it appears that you are using the FillByParentPrimaryKey, which is fine too). If you have the child BO on the form also, then you might want to use the CopyDataFrom() method instead for the list view. By using this, you will only make one trip to the db (to fill the child BO), then just copy that data into the listview.
Hope that gets you thinking some more and helps!