Универсальная форма для создания компонентов - PullRequest
0 голосов
/ 08 ноября 2011

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

#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;

public ref class GUI : public Form
{
private:
    int x, y;
    String^ text;
    Button^ btm;

public:
    GUI(int _x, int _y, String^ caption)
    {
        x = _x;
        y = _y;
        text = caption;
        init_btm();
    }
    void init_btm()
    {
        btm = gcnew Button();
        btm->Location = Point(x, y);
        btm->Text = text;
        Controls->Add(btm);
    }
};

int main(array<System::String ^> ^args)
{
    Application::Run(gcnew GUI(20,20,"Ola mundo"));
    return 0;
}

Я пытаюсь создать что-то вроде этого ...

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

ADD_BTM^ btm;
btm->Add(20,20,"Hello 1");
btm->Add(20,20,"Hello 2");

Вам также может быть интересно, почему я не «проектировал» свой интерфейсЯ изучаю C ++ / CLI, и я пытаюсь создать эту программу, просто чтобы учиться.Я ценю помощь.

1 Ответ

1 голос
/ 08 ноября 2011

Вы уже знаете, как добавить новую кнопку в форму, вам просто нужно добавить параметры в метод и затем вызывать его повторно:

В public разделе GUI:

void AddButton(int x, int y, String^ caption)
{
    auto button = gcnew Button();
    button->Location = Point(x, y);
    button->Text = caption;
    Controls->Add(button);
}

In main:

auto form = gcnew GUI();

form->AddButton(20, 20, "Hello 1");
form->AddButton(40, 40, "Hello 2");

Application::Run(form);

(Код использует auto из C ++ 11. Если вы не используете VS 2010, просто замените их на фактический тип.)

...