Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Переопределение Text в своем UserControl / 21 сообщений из 21, страница 1 из 1
10.10.2007, 16:31
    #34860889
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
Привет коллеги, помогите добрым советом, не дает покоя следующая фигня
есть UserControl с примерно таким кодом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public MyUserControl : UserControl
{          [Browsable(true),Editor(typeof(System.ComponentModel.Design.MultilineStringEditor),typeof(System.Drawing.Design.UITypeEditor))]
        [DefaultValue(""), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]        
        public override string Text
        {
            get
            {
                return textBox.Text;
            }
            set
            {
                textBox.Text = value;
            }
        }
}
все бы ничего, да при кидании данного контрола на форму свойству Text все время присваивается автоматом сгенеренное значение в стиле myUserControl1, что в целом характерно для многих наследников Control но меня не устраивает, хочу чтоб пустым оставалось. Вот как эта фигня обходится например в TextBox не могу никак в рефлекторе нарыть. И своего способа забороть тоже не найду, присваивается это дело после вызова конструктора, где не ясно, стэктрейс тоже ситуации не облегчает, в общем караул, мелочь вроде а никак :-(
...
Рейтинг: 0 / 0
10.10.2007, 17:01
    #34861031
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
Или я что-то не понял, или одно из двух...
попробовал по всякому, поле userControl11.Text (class UserControl1 : UserControl )всегда пустое... и в конструкторе, и после, и при добавлении на форму...
Научите, как повторить Вашу проблему. :-(

Море излечило меня от Джихада...(с)
...
Рейтинг: 0 / 0
10.10.2007, 17:03
    #34861041
maybeleo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
chpashaЭтим занимается, кажется, ControlDesigner.InitializeNewComponent. Как победить - точно не скажу, поглядите в мсдне топик про этот метод, там чего-то сказано на сей счет.
...
Рейтинг: 0 / 0
10.10.2007, 17:03
    #34861045
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
D129Или я что-то не понял, или одно из двух...
попробовал по всякому, поле userControl11.Text (class UserControl1 : UserControl )всегда пустое... и в конструкторе, и после, и при добавлении на форму...
Научите, как повторить Вашу проблему. :-(

Море излечило меня от Джихада...(с)
ты его объявлял как я Browsable(true) ? В этом загвоздка. Когда оно в дизайнере не видно, оно и не ставится. Судя по стектрейсу именно дизайнер устанавливает значение этого поля, а не сам контрол. Но могу ошибаться
...
Рейтинг: 0 / 0
10.10.2007, 17:05
    #34861054
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
maybeleo chpashaЭтим занимается, кажется, ControlDesigner.InitializeNewComponent. Как победить - точно не скажу, поглядите в мсдне топик про этот метод, там чего-то сказано на сей счет.Во-во, из стектрейса я тоже самое знание извлек (ну кроме кому принадлежит этот InitializeNewComponent). Сейчас посмотрю, что там пишуть, сенкс.
...
Рейтинг: 0 / 0
10.10.2007, 17:13
    #34861086
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
У меня скомпилилось только с такой строкой атрибутов:
[Browsable(true),Editor(typeof(System.ComponentModel.Design.DesignerCollection),typeof(System.Drawing.Design.UITypeEditor))]
[DefaultValue("")]// , DesignerSerializationVisibility(DesignerSerializationVisibility.Visible) ]


в System.ComponentModel.Design. - у меня нету никакого "мульти"
А DesignerSerializationVisibility - Error 1 Attribute 'DesignerSerializationVisibility' is not valid on this declaration type. It is valid on 'method, property, indexer, field, event' declarations only.

Но тект пустой.
...
Рейтинг: 0 / 0
10.10.2007, 17:15
    #34861096
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
у меня с мультилайн тоже не компилится :)
но текст непустой :)
пробовал побороть, пока не выходит
...
Рейтинг: 0 / 0
10.10.2007, 17:15
    #34861097
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
в смысле Text == ""

Это что, различия в студиях?
...
Рейтинг: 0 / 0
10.10.2007, 17:18
    #34861112
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
кстати....
...
Рейтинг: 0 / 0
10.10.2007, 17:19
    #34861116
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
It will look at the default property for the control and, if it is of type string, it will set this property's value to the name of the component

т.е. по логике если над классом DefaultProperty(НеТекст) должно пахать, но не пашет. Пока заборол так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class CustomDesigner : System.Windows.Forms.Design.ControlDesigner
    {
        public override void InitializeNewComponent(System.Collections.IDictionary defaultValues)
        {
            base.InitializeNewComponent(defaultValues);
            this.Control.Text = String.Empty;
        }
    }

на счет что там где не катит :-( без понятия, усе в порядке
...
Рейтинг: 0 / 0
10.10.2007, 17:23
    #34861131
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
не дописал выдержку из библии
The ControlDesigner class overrides this method. It will look at the default property for the control and, if it is of type string, it will set this property's value to the name of the component. It only does this if the designer has been configured with this option in the options service

Выделенную строку пока не осмыслил, но это имхо идеальное решение. О идея, сейчас посмотрю на дизайнер TextBox, там красивое решение сто пудов
...
Рейтинг: 0 / 0
10.10.2007, 17:23
    #34861133
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
winsky!кстати....
нет, не получилось
...
Рейтинг: 0 / 0
10.10.2007, 17:27
    #34861153
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
Пипец красиво решение у TextBox - как у меня только универсально через рефлексию, тю

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public override void InitializeNewComponent(IDictionary defaultValues)
{
    base.InitializeNewComponent(defaultValues);
    PropertyDescriptor descriptor = TypeDescriptor.GetProperties(base.Component)["Text"];
    if (((descriptor != null) && (descriptor.PropertyType == typeof(string))) && (!descriptor.IsReadOnly && descriptor.IsBrowsable))
    {
        descriptor.SetValue(base.Component, "");
    }
}
Вот оно и Browsable как раз проверяет, короче все к одному. Не понятно только где можно in the options service сразу указать, чтоб не хулиганил. Ну да ладно, буду считать что решение найдено, Всем спасибо, особенно maybeleo за толчок в нужном направлении
...
Рейтинг: 0 / 0
10.10.2007, 17:28
    #34861159
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
P.S. а ведь действительно, если приглядеться, при кидании TextBox на форму видно как в нем появляется и исчезает текст
...
Рейтинг: 0 / 0
10.10.2007, 17:41
    #34861203
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
chpashaP.S. а ведь действительно, если приглядеться, при кидании TextBox на форму видно как в нем появляется и исчезает текст

У меня ничего не видно :(

Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727

Installed Edition: Professional
...
Рейтинг: 0 / 0
10.10.2007, 17:50
    #34861234
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
D129 chpashaP.S. а ведь действительно, если приглядеться, при кидании TextBox на форму видно как в нем появляется и исчезает текст

У меня ничего не видно :(

Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727

Installed Edition: Professionalтакая же точно. от скорости компа зависит, чем быстрей, тем незаметней для глаза, но на моем P4-3,2 при отпускании текстбкса на форму видно, просто внимания раньше не обращал
...
Рейтинг: 0 / 0
10.10.2007, 17:58
    #34861256
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
chpashaP.S. а ведь действительно, если приглядеться, при кидании TextBox на форму видно как в нем появляется и исчезает текст
точно, есть. Раньше не замечал. Спасибо за тему. Буду знать.
...
Рейтинг: 0 / 0
10.10.2007, 18:01
    #34861268
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
chpashaПипец красиво решение у TextBox - как у меня только универсально через рефлексию, тю

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public override void InitializeNewComponent(IDictionary defaultValues)
{
    base.InitializeNewComponent(defaultValues);
    PropertyDescriptor descriptor = TypeDescriptor.GetProperties(base.Component)["Text"];
    if (((descriptor != null) && (descriptor.PropertyType == typeof(string))) && (!descriptor.IsReadOnly && descriptor.IsBrowsable))
    {
        descriptor.SetValue(base.Component, "");
    }
}
Вот оно и Browsable как раз проверяет, короче все к одному. Не понятно только где можно in the options service сразу указать, чтоб не хулиганил. Ну да ладно, буду считать что решение найдено, Всем спасибо, особенно maybeleo за толчок в нужном направлении


- Если смотреть рефлектором, то эта функция должна быть в System.Windows.Forms.TextBox?
Правильно?
Дайте точный путь, пожалуйста.
...
Рейтинг: 0 / 0
10.10.2007, 18:08
    #34861289
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
D129 chpashaПипец красиво решение у TextBox - как у меня только универсально через рефлексию, тю

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public override void InitializeNewComponent(IDictionary defaultValues)
{
    base.InitializeNewComponent(defaultValues);
    PropertyDescriptor descriptor = TypeDescriptor.GetProperties(base.Component)["Text"];
    if (((descriptor != null) && (descriptor.PropertyType == typeof(string))) && (!descriptor.IsReadOnly && descriptor.IsBrowsable))
    {
        descriptor.SetValue(base.Component, "");
    }
}
Вот оно и Browsable как раз проверяет, короче все к одному. Не понятно только где можно in the options service сразу указать, чтоб не хулиганил. Ну да ладно, буду считать что решение найдено, Всем спасибо, особенно maybeleo за толчок в нужном направлении


- Если смотреть рефлектором, то эта функция должна быть в System.Windows.Forms.TextBox?
Правильно?
Дайте точный путь, пожалуйста.

нет, это в классе TextBoxBaseDesigner, из System.Windows.Forms.Design, что в сборке System.Design
...
Рейтинг: 0 / 0
10.10.2007, 18:25
    #34861336
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
Спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.06.2015, 11:35
    #38989494
igen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределение Text в своем UserControl
chpasha, Предполагаю, что имелось ввиду это:
Код: c#
1.
2.
3.
4.
public override void InitializeNewComponent(System.Collections.IDictionary defaultValues) {
				base.InitializeNewComponent(defaultValues);
				(this.GetService(typeof(DesignerOptions)) as DesignerOptions).
}



Вот только никакого такого свойства там нет, а есть только те св-ва, что можно увидеть в настройках студии Сервис -> Параметры -> Конструктор Windows Forms.
P.S. Складывается ощущение, что это волшебное св-во когда-то было, но его удалили в более поздних версиях (Студии?), или оно где-то есть, но не документировано?!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Переопределение Text в своем UserControl / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]