Нужна документация по написанию компонентов
От: AXP  
Дата: 13.05.07 12:12
Оценка:
Хочу написать UserControl — неследник от TextBox или от TextBoxBase — не важно. Нужна поддержка цветного текста.
Искал по инету. Видел http://rsdn.ru/article/dotnet/dotnetcontrols.xml
Автор(ы): Владислав Чистяков
Дата: 09.05.2003
Создание ПО из компонентов подразумевает, что компоненты будут добавляться к проекту во время разработки. При этом будет производиться их начальная настройка. Компоненты как таковые не подразумевают (вернее сказать, не обязаны иметь) пользовательского интерфейса (ни для программиста, ни для конечного пользователя). В этом качестве выступают части IDE и дополнительные программные дизайнеры. Первой компонентной средой был продукт, купленный Microsoft на заре своего существования. Впоследствии на его базе родился VB. Далее была Delphi… в общем, к концу двадцатого века компоненты стали поддерживаться почти везде (даже в Visual C++, хотя он и по сей день не очень-то визуальный).
но там не про UserControl. В конце было написано про продолжения, которого так и не было. Может кто подскажет где есть какой мануал?

Заранее спасибо.

PS Пишу под Compact Framework на C#
Re: Нужна документация по написанию компонентов
От: J_K  
Дата: 13.05.07 12:55
Оценка:
Здравствуйте, AXP, Вы писали:

AXP>Хочу написать UserControl — неследник от TextBox или от TextBoxBase — не важно. Нужна поддержка цветного текста.

AXP>Искал по инету. Видел http://rsdn.ru/article/dotnet/dotnetcontrols.xml
Автор(ы): Владислав Чистяков
Дата: 09.05.2003
Создание ПО из компонентов подразумевает, что компоненты будут добавляться к проекту во время разработки. При этом будет производиться их начальная настройка. Компоненты как таковые не подразумевают (вернее сказать, не обязаны иметь) пользовательского интерфейса (ни для программиста, ни для конечного пользователя). В этом качестве выступают части IDE и дополнительные программные дизайнеры. Первой компонентной средой был продукт, купленный Microsoft на заре своего существования. Впоследствии на его базе родился VB. Далее была Delphi… в общем, к концу двадцатого века компоненты стали поддерживаться почти везде (даже в Visual C++, хотя он и по сей день не очень-то визуальный).
но там не про UserControl. В конце было написано про продолжения, которого так и не было. Может кто подскажет где есть какой мануал?


AXP>Заранее спасибо.


AXP>PS Пишу под Compact Framework на C#


Насколько я помню, основная идея — это переопределить некоторые методы, в частности, OnPaint. Вот тут есть пример про ListBox,

http://samples.gotdotnet.com/quickstart/compactframework/

можно сделать аналогично и TextBox, это даже проще.
Life is very short and there's no time
for fussing and fighting... (C) Paul McCartney & John Lennon
Re[2]: Нужна документация по написанию компонентов
От: AXP  
Дата: 13.05.07 13:37
Оценка:
Спасибо. Очень полезно оказалось.

Что то я не вникну только никак. Создал компонент на основе TextBox, он нормально дабавляется, если изменить его свойства программно — все меняется.
Попробовал заменить OnPaint — ничего не вышло. Вот код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ColoredTextBox
{
    public partial class ColoredTextBox : TextBox
    {
        public ColoredTextBox()
        {
            InitializeComponent();
            this.Multiline = true;
            this.Width = 50;
            this.Height = 50;
            this.WordWrap = false;
            this.ScrollBars = ScrollBars.Both;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Pen blackPen = new Pen(Color.Black, 3);
            Rectangle rectangle1 = new Rectangle(0, 0, 20, 10);
            e.Graphics.DrawRectangle(blackPen, rectangle1);
            MessageBox.Show("Paint!");
            base.OnPaint(e);
        }
    }
}


При перерисовке не черного квадрата не виджно, не вылазит MassegaBex "Paint!"

Что я делаю не так?
Re[3]: Нужна документация по написанию компонентов
От: J_K  
Дата: 13.05.07 13:46
Оценка:
AXP> protected override void OnPaint(PaintEventArgs e)
AXP> {
AXP> Pen blackPen = new Pen(Color.Black, 3);
AXP> Rectangle rectangle1 = new Rectangle(0, 0, 20, 10);
AXP> e.Graphics.DrawRectangle(blackPen, rectangle1);
AXP> MessageBox.Show("Paint!");
AXP> base.OnPaint(e);
AXP> }
AXP> }
AXP>}
AXP>[/ccode]

AXP>При перерисовке не черного квадрата не виджно, не вылазит MassegaBex "Paint!"


AXP>Что я делаю не так?


Попробуй base.OnPaint(e); поставить в самом начале, а не в конце. Иначе ты просто перерисовываешь методом базового класса.
Life is very short and there's no time
for fussing and fighting... (C) Paul McCartney & John Lennon
Re[4]: Нужна документация по написанию компонентов
От: AXP  
Дата: 13.05.07 14:21
Оценка:
Здравствуйте, J_K, Вы писали:


AXP>> protected override void OnPaint(PaintEventArgs e)

AXP>> {
AXP>> Pen blackPen = new Pen(Color.Black, 3);
AXP>> Rectangle rectangle1 = new Rectangle(0, 0, 20, 10);
AXP>> e.Graphics.DrawRectangle(blackPen, rectangle1);
AXP>> MessageBox.Show("Paint!");
AXP>> base.OnPaint(e);
AXP>> }
AXP>> }
AXP>>}
AXP>>[/ccode]

AXP>>При перерисовке не черного квадрата не виджно, не вылазит MassegaBex "Paint!"


AXP>>Что я делаю не так?


J_K>Попробуй base.OnPaint(e); поставить в самом начале, а не в конце. Иначе ты просто перерисовываешь методом базового класса.

Ну да так вначале и делал. 0 эффекта. Я вобще base.OnPaint(e); убирал. Да и независима от того где он стоял MwssageBox то должен же был выдаваться!
Re[5]: Нужна документация по написанию компонентов
От: J_K  
Дата: 13.05.07 14:56
Оценка:
Здравствуйте, AXP, Вы писали:

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



AXP>>> protected override void OnPaint(PaintEventArgs e)

AXP>>> {
AXP>>> Pen blackPen = new Pen(Color.Black, 3);
AXP>>> Rectangle rectangle1 = new Rectangle(0, 0, 20, 10);
AXP>>> e.Graphics.DrawRectangle(blackPen, rectangle1);
AXP>>> MessageBox.Show("Paint!");
AXP>>> base.OnPaint(e);
AXP>>> }
AXP>>> }
AXP>>>}
AXP>>>[/ccode]

AXP>>>При перерисовке не черного квадрата не виджно, не вылазит MassegaBex "Paint!"


AXP>>>Что я делаю не так?


J_K>>Попробуй base.OnPaint(e); поставить в самом начале, а не в конце. Иначе ты просто перерисовываешь методом базового класса.

AXP>Ну да так вначале и делал. 0 эффекта. Я вобще base.OnPaint(e); убирал. Да и независима от того где он стоял MwssageBox то должен же был выдаваться!

Попробуй:
1. Убрать из кода MessageBox.Show("Paint!");
2. Проверить под отладкой, заходит ли он вообще в обработчик.
Life is very short and there's no time
for fussing and fighting... (C) Paul McCartney & John Lennon
Re[6]: Нужна документация по написанию компонентов
От: AXP  
Дата: 13.05.07 15:49
Оценка:
J_K>Попробуй:
J_K>1. Убрать из кода MessageBox.Show("Paint!");
J_K>2. Проверить под отладкой, заходит ли он вообще в обработчик.

нет, не заходит. Я об этом и говорю. В чем то я не прав. никак не помйму, в чем.
Re[7]: Нужна документация по написанию компонентов
От: Дьяченко Александр Россия  
Дата: 13.05.07 20:12
Оценка:
Здравствуйте, AXP, Вы писали:

AXP>нет, не заходит. Я об этом и говорю. В чем то я не прав. никак не помйму, в чем.


Скорей всего отрисовка отдана операционке. См. метод Controi.SetStyle и перечисление ControlStyles.

[FlagsAttribute] 
public enum ControlStyles


Member nameDescription
......
UserPaintIf true, the control paints itself rather than the operating system doing so. If false, the Paint event is not raised. This style only applies to classes derived from Control.
......
... << RSDN@Home 1.2.0 alpha rev. 678>>
Re[8]: Нужна документация по написанию компонентов
От: AXP  
Дата: 13.05.07 20:33
Оценка:
ДА>Скорей всего отрисовка отдана операционке. См. метод Controi.SetStyle и перечисление ControlStyles.

Вот как. Ну а если так, то как лучше поступить? Отменить перерисовку операционкой и рисовать самому?
Или есть способ частично рисовать самому (только текст)? Не хотелось бы накладывать один рисунок на другой — лишнее время. Тем более, что работает все это на кпк...
Re[9]: Нужна документация по написанию компонентов
От: Дьяченко Александр Россия  
Дата: 14.05.07 01:29
Оценка:
Здравствуйте, AXP, Вы писали:

ДА>>Скорей всего отрисовка отдана операционке. См. метод Controi.SetStyle и перечисление ControlStyles.

AXP>Вот как. Ну а если так, то как лучше поступить? Отменить перерисовку операционкой и рисовать самому?
AXP>Или есть способ частично рисовать самому (только текст)? Не хотелось бы накладывать один рисунок на другой — лишнее время. Тем более, что работает все это на кпк...

Попробуй поставь UserPaint и в OnPaint вызвать base.OnPaint может отрисует... Самому не нужно было ни разу.
... << RSDN@Home 1.2.0 alpha rev. 678>>
Re[3]: Нужна документация по написанию компонентов
От: tyger Россия  
Дата: 14.05.07 05:35
Оценка:
Здравствуйте, AXP, Вы писали:

AXP>Спасибо. Очень полезно оказалось.


AXP>Что то я не вникну только никак. Создал компонент на основе TextBox, он нормально дабавляется, если изменить его свойства программно — все меняется.

AXP>Попробовал заменить OnPaint — ничего не вышло. Вот код:

AXP>При перерисовке не черного квадрата не виджно, не вылазит MassegaBex "Paint!"


AXP>Что я делаю не так?

Было подобное, но только я с окном бился (формой), оказалось — переопределенный OnPaint нормально отработает на наследнике твоего контрола!
Т.е. просто отнаследуй контрол от твоего и на нем смотри должно заработать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Нужна документация по написанию компонентов
От: J_K  
Дата: 15.05.07 10:31
Оценка:
Здравствуйте, AXP, Вы писали:

AXP>Хочу написать UserControl — неследник от TextBox или от TextBoxBase — не важно. Нужна поддержка цветного текста.

AXP>Искал по инету. Видел http://rsdn.ru/article/dotnet/dotnetcontrols.xml
Автор(ы): Владислав Чистяков
Дата: 09.05.2003
Создание ПО из компонентов подразумевает, что компоненты будут добавляться к проекту во время разработки. При этом будет производиться их начальная настройка. Компоненты как таковые не подразумевают (вернее сказать, не обязаны иметь) пользовательского интерфейса (ни для программиста, ни для конечного пользователя). В этом качестве выступают части IDE и дополнительные программные дизайнеры. Первой компонентной средой был продукт, купленный Microsoft на заре своего существования. Впоследствии на его базе родился VB. Далее была Delphi… в общем, к концу двадцатого века компоненты стали поддерживаться почти везде (даже в Visual C++, хотя он и по сей день не очень-то визуальный).
но там не про UserControl. В конце было написано про продолжения, которого так и не было. Может кто подскажет где есть какой мануал?


AXP>Заранее спасибо.


AXP>PS Пишу под Compact Framework на C#


Ну как успехи?
Life is very short and there's no time
for fussing and fighting... (C) Paul McCartney & John Lennon
Re[9]: Нужна документация по написанию компонентов
От: DangerRSDN Россия http://danger-world.livejournal.com/
Дата: 16.05.07 07:18
Оценка:
Здравствуйте, AXP, Вы писали:

AXP>Вот как. Ну а если так, то как лучше поступить? Отменить перерисовку операционкой и рисовать самому?

AXP>Или есть способ частично рисовать самому (только текст)? Не хотелось бы накладывать один рисунок на другой — лишнее время. Тем более, что работает все это на кпк...

Вызови в конструкторе SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer). Если надо чтобы поле ввода меняло размеры то добавь еще флаг ResizeRedraw. И в коде отрисовки сначала вызывай base.OnPaint() — он нарисует тебе стандартное поле ввода а потом поверх него нарисуй что-то свое.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.