UserControl значение по-умолчанию для свойства Text
От: maximkharitonov  
Дата: 05.02.10 16:45
Оценка:
Здравствуйте.
Такая проблемка выявилась. Делаю наследника от UserControl, называю его TextUserControl.
В дизайнере ставлю на него TextBox (генерируется имя textBox1). Вот весь исходник TextUserControl:
    public partial class TextUserControl : UserControl
    {
        public TextUserControl()
        {
            InitializeComponent();
        }

        [Browsable(true), DefaultValue("")]
        public override string Text
        {
            get
            {
                return textBox1.Text;
            }
            set
            {
                textBox1.Text = value;
            }
        }
    }


Компилирую. Создаю форму и в дизайнере ставлю на нее TextUserControl.
Все успешно, но в textBox1 уже проставлен текст textUserControl1.

Кто его туда поставил и как заменить его на другое, например пустое, значение?

Кстати, если атрибут Browsable убрать, то простановки текста не происходит.
Re: UserControl значение по-умолчанию для свойства Text
От: Yuri Россия http://spbdetails.ru
Дата: 08.02.10 11:42
Оценка:
Здравствуйте, maximkharitonov, Вы писали:

дизайнер проставил, думаю
в дизанере же и убрать
Take it easy.
Re[2]: UserControl значение по-умолчанию для свойства Text
От: maximkharitonov  
Дата: 08.02.10 15:35
Оценка: 16 (1)
Здравствуйте, Yuri, Вы писали:

Y>Здравствуйте, maximkharitonov, Вы писали:


Y>дизайнер проставил, думаю

Y>в дизанере же и убрать

Да, спасибо, насчет дизайнера уже нашел. Сделал следующий рабочий вариант дизайнера:

        public override void InitializeNewComponent(System.Collections.IDictionary defaultValues)
        {
            PropertyDescriptor textPropDesc = TypeDescriptor.GetProperties(Component)["Text"];

            if (textPropDesc != null &&
                textPropDesc.PropertyType == typeof(string) &&
                !textPropDesc.IsReadOnly &&
                textPropDesc.IsBrowsable)
            {
                textPropDesc.SetValue(Component, "");
            }
        }


Все почти устраивает. "Почти" выражается в том, что теперь при перетаскивании компонента на форму текст
в контроле появляется на мгновение, потом исчезает. Почему-то не работает следующий, на мой взгляд даже
более логичный вариант:

        public override void InitializeNewComponent(System.Collections.IDictionary defaultValues)
        {
            if (defaultValues.Contains("Text"))
                defaultValues["Text"] = "";
            else
                defaultValues.Add("Text", "");
            
            base.InitializeNewComponent(defaultValues);
        }


Может есть предположения почему последний вариант не работает?
Re[3]: UserControl значение по-умолчанию для свойства Text
От: MozgC США http://nightcoder.livejournal.com
Дата: 08.02.10 15:43
Оценка:
Здравствуйте, maximkharitonov, Вы писали:

M>Все почти устраивает. "Почти" выражается в том, что теперь при перетаскивании компонента на форму текст

M>в контроле появляется на мгновение, потом исчезает.

Думаю что это нормально, у стандартных контролов так же. Кстати спасибо что отписали, я вот не знал что это так контролируется
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.