I
iceheart
Здравствуйте.
Я только-только начинаю переходить на .NET, раньше писал под VCL или чистым API. С непривычки к новой технологии постоянно спотыкаюсь на всяких пустяках... Пишу проект под С++, в нём нужно использовать собственный элемент управления. Так уж получается, что написать этот элемент с нуля будет гораздо проще, чем лепить из готовых кнопочек...
Создал я в солюшене отдельный проект, в него добавил класс-наследник Windows::Forms::Control'а. Переопределил в нём функцию OnPaint, пока чтобы просто прямоугольник рисовала по границам контрола. Теперь хотелось бы положить контрол на форму в главном проекте, а не получается.
Ссылку в свойствах главного проекта на проект с контролом добавил, билд ордер настроил как нужно. Но контрол на панели инструментов не появляется, хотя по link removed должен был там показаться автоматически. Пробовал добавить вручную, вписав в класс соответствующий объект и прописав свойства в InitializeComponent. Проект компилируется, но на форме контрол не видать, как в дизайнере, так и во время выполнения (то есть метод OnPaint не вызывается или же не работает).
Подскажите, что надо сделать, чтобы контрол появился в тулбоксе?
Нужно ли что-то делать с контролом, чтобы правильно выполнялась отрисовка?
И наконец, как правильно настроить отображение контрола в режиме дизайна?
Если у кото-нибудь найдётся пример готового контрола под С++, буду очень благодарен.
А вот теперешний сорец того самого контрола:
Я только-только начинаю переходить на .NET, раньше писал под VCL или чистым API. С непривычки к новой технологии постоянно спотыкаюсь на всяких пустяках... Пишу проект под С++, в нём нужно использовать собственный элемент управления. Так уж получается, что написать этот элемент с нуля будет гораздо проще, чем лепить из готовых кнопочек...
Создал я в солюшене отдельный проект, в него добавил класс-наследник Windows::Forms::Control'а. Переопределил в нём функцию OnPaint, пока чтобы просто прямоугольник рисовала по границам контрола. Теперь хотелось бы положить контрол на форму в главном проекте, а не получается.
Ссылку в свойствах главного проекта на проект с контролом добавил, билд ордер настроил как нужно. Но контрол на панели инструментов не появляется, хотя по
Подскажите, что надо сделать, чтобы контрол появился в тулбоксе?
Нужно ли что-то делать с контролом, чтобы правильно выполнялась отрисовка?
И наконец, как правильно настроить отображение контрола в режиме дизайна?
Если у кото-нибудь найдётся пример готового контрола под С++, буду очень благодарен.
А вот теперешний сорец того самого контрола:
Код:
#pragma once
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Diagnostics;
using namespace System::Windows::Forms;
namespace ts_controls {
/// <summary>
/// Summary for tcTape
/// </summary>
public ref class tcTape : public System::Windows::Forms::Control
{
public:
tcTape(void)
{
InitializeComponent();
SetStyle( ControlStyles::UserPaint, true );
}
tcTape(System::ComponentModel::IContainer ^container)
{
/// <summary>
/// Required for Windows.Forms Class Composition Designer support
/// </summary>
container->Add(this);
InitializeComponent();
}
protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~tcTape()
{
if (components)
{
delete components;
}
}
virtual void OnPaint( PaintEventArgs ^e )override
{
System::Drawing::Pen^ pen = gcnew System::Drawing::Pen( System::Drawing::Color::Black );
e->Graphics->DrawRectangle( pen, 0, 0, Width, Height );
}
private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
components = gcnew System::ComponentModel::Container();
}
#pragma endregion
};
}