Just after the Text property has beed changed via user input or code, the C1MaskedTextBox updates the text again in order to make it consistent with the Mask. As a result, the TextChanged event can be triggered twice on each user input. In contrast to this, the MaskedTextChanged is triggered only when Text is updated with a value that conforms to the Mask.