TextBoxes for various number types
class TextBoxNum


Abbreviation should be avoided when naming a class: Num -> Numeric
The descriptive adjective should also be in front of the noun. It is a numerical textbox, and not a textbox number: NumericTextBoxBase
TextBoxNum and Update should be marked as abstract, unless a generic way of updating the value is provided in TextBoxNum. And by changing it to a abstract class, we should append Base to the end of the class name : NumericTextBoxBase, and its concrete classes can be named as FloatTextBox, DoubleTextBox...




class Value&lt;T&gt;

Without the definition of this class, I can only make some guess about it. We can observe that the value is assigned by a parameter from the constructor. The class itself seems to serve no other purpose than holding the value via void Value&lt;T&gt;.Set(T) and T Value.Get(). I would suggest you to replace them by T or T?, depending on whether or not if you want to enforce valid value is required.



Misc


Avoid try-catch as control-structure much as possible, unless that is your last resort.
Your Clamp method is comparing the value against the same upper boundary, max, twice.




Code:

public class NumericTextBox&lt;T&gt; : TextBox where T : IComparable&lt;T&gt;
{
    protected T min;
    protected T max;
    protected T value;

    public NumericTextBox(T value, T min, T max)
    {
        this.min = min;
        this.max = max;

        // ensure the value is with in valid range
        this.value = Clamp(value);
        // actually you should implement a full property for value and update the Text property in the setter
        this.Text = value.ToString();

        LostFocus += new EventHandler(Update);
    }

    protected virtual void Update(object sender, EventArgs e)
    {
        var type = typeof(T);
        var tryParse = type.GetMethod("TryParse", new[]
        {
            typeof(string), type.MakeByRefType()
        });
        var args = new object[] { Text, null };
        var result = (bool)tryParse.Invoke(null, args);

        if (result)
        {
            value = Clamp((T)args[1]);
            Text = value.ToString();
        }
        else
        {
            Text = value.ToString();
            Focus();
        }
    }
    protected T Clamp(T input)
    {
        if (input.CompareTo(max) &gt; 0)
        {
            return max;
        }

        if (input.CompareTo(min) &lt; 0)
        {
            return min;
        }

        return input;
    }
}