Hi Christian,
I'm not sure, but i suppose that:
(i) The ctor adds a new style (a StyleCollection member). This happens each time you open the form.
(ii) when closed, the form (designer) serializes the whole collection (with the item added in this session).
You open the form again and get two items in the second design session, 3 in the 3rd, etc., so you know exactly, how many times you have changed the form, since the grid was created :).
Break the loop. There are at least two simple ways.
(A) Do not create items in the ctor. The design time user must create an item (or 2, or 3, ...) "manually", i.e. with the help of the style collection designer.
(B) Make sure that "the item" (if you need only one) is created only once, i.e. only when nothing is persisted, when a control instance is created for the 1st time. How to distinguish? In ctor you can not know will something be depersisted or not, this is done later. Thus, you must wait until everything is depersisted, look is the item there or not (you must know how to check for "the item" -- by name, by some properties, if the user (designer) can rename the item) and create one only if needed. The best [the only?] point i know, is ISupportInitialize.EndInit(). This method will be called when all components are already depersisted.
HTH,
Dima.