After some trial & errors (with some infinite loops added to the mix), I've managed to find a good (not perfect) solution. I Hope the following code might be of some use to anyone.
Public Sub EditValueChanged(sender As System.Object, e As System.EventArgs) Handles txt.EditValueChanged
Dim edit As DevExpress.XtraEditors.MemoEdit = TryCast(sender, DevExpress.XtraEditors.MemoEdit)
'Take copy of the array
Dim myStringArrayCopy As String() = control.Lines
Dim hasEdits As Boolean = False
For Each str As String In myStringArrayCopy
If str.Length > maxCharCount Then
Dim indexString As Integer = Array.IndexOf(myStringArrayCopy, str)
myStringArrayCopy(indexString) = str.Substring(0, 47)
hasEdits = True
End If
Next str
If (hasEdits) Then
control.Lines = myStringArrayCopy
control.Refresh()
End If
End Sub
I have a couple of remarks to this code.
Remark 1: Use EditValueChanged instead of EditValueChanging. It makes more sense to modify the textbox after the edit has been made instead of in the middle.
Remark 2: If an edit has been made with more then 48 chars. Then the string will be shortened but the cursor will be placed on the firstline (this is a multiline txt)
Remark 3: Don't forget the refresh(). Otherwise the changes being made won't be visible to the user.