I'm not sure the ReadOnlyAttribute on your class type won't have any affect. It certainly wouldn't prevent the list from adding/removing items.
If you are handling the PropertyChildAdding event, then you can set e.Cancel to true to stop it from adding a child. But this won't hide the add button.
To hide the add button, you need to add a custom TypeConverter to you list as I described above. Again, the Collection Null Values QuickStart under the PropertyGrid section of our Sample Browser shows an example similar to this. Specifically, the "StringListConverter" is used to allow null values to be added to the list. But, your converter would always return false.
If this doesn't help, please put together a small sample project and email it over to our support address. Once we have that, we can take a closer look.
Actipro Software Support