You'll need a TypeConverter to convert between the string representation of the type, as displayed in the Properties window, and the Type. You are very unspecific in your question so I'll just punt an answer. A good candidate is the TypeListConverter class, it already does the heavy lifting. You just need to derive your own and call the base constructor with a list of the Types you accept:
public partial class UserControl1 : UserControl {
public UserControl1() {
InitializeComponent();
}
[TypeConverter(typeof(myTypeTypeConverter))]
public Type Type { get; set; }
private class myTypeTypeConverter : TypeListConverter {
private static Type[] types = new Type[] { typeof(int), typeof(string), typeof(long) };
public myTypeTypeConverter() : base(types) {}
}
}
After you drop this control on a form, you can use the combobox for the Type property and choose between the three types. If this is not suitable then you'll have to make your own TypeConverter. Use Reflector to have a look at TypeListConverter. It isn't very big.