Hello,
By your description, all the forms are in the same process and there is one MDI Parent with several different children forms. Being in different DLL's doesn't make any real problems as long as everything is in the same process. If not then you have an entirely different problem. First thing to understand is that the way I see it by your description, there isn't a specific technology you are looking for, just different methodologies.
With that said, there are a LOT of different ways to get them to communicate. One way is directly.
Put a method in AF that will tell CF something when BF says to. Then just use the MDIparent property of BF to call the method in the MDI Parent. You will have to cast the propterty to your MDI parent to see the method.
MyMDIParent myParent = this
.MdiParent as MyMDIParent;
string strMsg = "Hell form CF";
myParent.TellCfSomething(strMsg);
Then when BF calls the method, the Parent will tell cf the message. You could put a method in the MDI Parent to get a reference to CF and then just tell CF directly. You could loop through the children of the MDI Parent until you found CF or the form you are looking for. See what I mean by different ways?
Another way to do it, and probably how I would do it depending on your situation is use events.
Still talking about BF trying to talk to CF ok.
Put an event in BF that you can fire to get the data to CF. Then when the MDI Parent creates CF it creates a reference to the event in BF, and could assign the event handler to a method direclty in CF. Then when BF fires the event, CF receives it directly.
Did this help at all?
Ken