Completed
Last Updated: 15 May 2014 10:31 by ADMIN
ADMIN
Georgi I. Georgiev
Created on: 11 Nov 2013 03:22
Category: Editors
Type: Bug Report
0
FIX. RadTextBoxControl - Inserting newline does not work as expected
To reproduce:
Add a RadTextBoxControl to a form, insert a text using the following line:
this.radTextBoxControl1.AppendText(string.Format("{0} Foo {0} bar {0}", Environment.NewLine));

You will notice that the newlines are not taken into consideration

Workaround:
Use the following classes - 

public class MyTextBoxControl : RadTextBoxControl
{
    protected override RadTextBoxControlElement CreateTextBoxElement()
    {
        return new MyTextBoxControlElement();
    }
}

public class MyTextBoxControlElement : RadTextBoxControlElement
{
    protected override TextBoxViewElement CreateViewElement()
    {
         return new MyTextBoxViewElement();
    }

    protected override Type ThemeEffectiveType
    {
        get
        {
            return typeof(RadTextBoxControlElement);
        }
    }
}

public class MyTextBoxViewElement : TextBoxViewElement
{
    protected override void ReplaceTextBlock(ITextBlock targetBlock, int startCharPosition, int endCharPosition, string text)
    {
        if (string.IsNullOrEmpty(text) && startCharPosition == 0 && endCharPosition == targetBlock.Length)
        {
            this.Children.Remove(targetBlock as RadElement);
            return;
        }

        string headText = targetBlock.Text.Substring(0, startCharPosition);
        string tailText = targetBlock.Text.Substring(endCharPosition);
        targetBlock.Text = headText;

        if (TextBoxViewElement.IsSpecialText(text) || this.ContainsNewLine(text))
        {
            int index = string.IsNullOrEmpty(headText) ? targetBlock.Index : targetBlock.Index + 1;
            index = this.InsertTextBlocks(index, text, TextBlockElementType);

            if (string.IsNullOrEmpty(headText))
            {
                targetBlock.Index = index + 1;
            }

            if (!string.IsNullOrEmpty(headText) && !string.IsNullOrEmpty(tailText))
            {
                index = this.InsertTextBlocks(index + 1, tailText, TextBlockElementType);
                return;
            }
        }
        else
        {
            targetBlock.Text += text;
        }

        targetBlock.Text += tailText;
    }

    public bool ContainsNewLine(string text)
    {
        string[] words = text.Split(new char[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < words.Length; i++)
        {
            string word = words[i];
            if (!string.IsNullOrEmpty(word) && word == Environment.NewLine)
            {
                return true;
            }
        }

        return false;
    }
}
0 comments