Это ясно, что если создать указатель типа <что там>::Form будет работать, но мне нужна уже созданная форма, с кнопками и т.п. (в общем разными контролами), а вручную (т.е. программно) прописывать их на чистой форме мне не хочеЦЦа (много писанины и не факт, что получиЦЦа так как надо). Меня еще смущает вот что....... Когда я добавлял форму к уже созданному проекту, в новом заголовочном файле Form2.h было написано так:

#pragma once
#include "Form1.h"

using namespace System;



using namespace System::Data;

namespace My1 {

///
/// Summary for Form2



public ref class Form2: public System::Windows::Forms::Form
{
public:
Form2(void)
{
InitializeComponent();

}

Protected:

~Form2()
{
if (components)
{
delete components;
}
}

Private:



///
{
this->components = gcnew System::ComponentModel::Container();
this->Size = System::Drawing::Size(300,300);
this->Text = L"Form2";
this->Padding = System::Windows::Forms::Padding(0);
this->
}
#pragma endregion
};
}

хотя в Form1.h написано так:

#pragma once
#include "Form2.h"

namespace My1 {

Using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

///
/// Summary for Form1
/// WARNING: If you change the name of this class, you will need to change the
/// "Resource File Name" property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
public ref class Form1: public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//TODO: Add the constructor code here
}

Protected:
/// Clean up any resources being used.
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
protected:

Private:
/// Required designer variable.
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
// button1
this->button1->Location = System::Drawing::Point(60, 76);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(75, 23);
this->button1->TabIndex = 0;
this->button1->Text = L"button1";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
// Form1
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 266);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);

}
#pragma endregion

Static System::Windows::Forms::Form ^frm = gcnew System::Windows::Forms::Form();
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
frm->Show();
}
};
}

В РАЗНЫХ МЕСТАХ ПРОПИСАНО ПОДКЛЮЧЕНИЕ ПРОСТРАНСТВА ИМЕН!

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

Примечания:

Создание форм

В большинстве случаев две формы в детализированной конфигурации основаны на одной таблице или запросе. Если у вас уже есть пара форм, необходимых для использования (одна из которых - таблица или форма для нескольких элементов, а другая - форма отдельного элемента или форма сведений), вы можете пропустить этот раздел. В противном случае используйте следующие процедуры для их создания.

Создание формы таблицы или формы с несколькими элементами

    В области навигации выберите таблицу или запрос с данными, которые нужно отобразить в табличной форме.

    Выберите пункты Создание > Другие формы , а затем - Несколько элементов или Таблица в зависимости от нужного типа формы.

    Сохраните и закройте форму.

Дополнительные сведения о формах для нескольких элементов см. в статье Создание формы с использованием инструмента "Несколько элементов" .

Создание формы отдельного элемента или формы сведений

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

    Выберите пункты Создание > Форма .

    Внесите необходимые изменения, сохраните и закройте форму.

Дополнительные сведения см. в статье Создание формы с помощью инструмента "Форма" .

Добавление логики для открытия формы сведений

Теперь рассмотрим, как добавить в форму для нескольких элементов или форму таблицы небольшой макрос, который будет открывать форму сведений и отображать правильный элемент.

Не беспокойтесь, если у вас мало опыта работы с макросами. Вы можете просто скопировать и вставить XML-код из процедуры, указанной в этой статье.

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

    Нажмите клавишу F4, чтобы открыть окно свойств, если оно еще не открыто.

    Щелкните столбец, в который нужно добавить макрос. Это должен быть столбец, при щелчке которого будет открываться форма сведений после выполнения макроса. На рисунке выше макрос добавлен в столбец frmContactList.

Совет: (СОВЕТ.) Можно добавить макросы в несколько столбцов.

Дополнительные сведения о макросах в базах данных на компьютере см. в статье

Последнее обновление: 31.10.2015

Чтобы добавить еще одну форму в проект, нажмем на имя проекта в окне Solution Explorer (Обозреватель решений) правой кнопкой мыши и выберем Add(Добавить)->Windows Form...

Дадим новой форме какое-нибудь имя, например, Form2.cs :

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

Private void button1_Click(object sender, EventArgs e) { }

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

Private void button1_Click(object sender, EventArgs e) { Form2 newForm = new Form2(); newForm.Show(); }

Теперь сделаем наоборот - чтобы вторая форма воздействовала на первую. Пока вторая форма не знает о существовании первой. Чтобы это исправить, надо второй форме как-то передать сведения о первой форме. Для этого воспользуемся передачей ссылки на форму в конструкторе.

Итак перейдем ко второй форме и перейдем к ее коду - нажмем правой кнопкой мыши на форму и выберем View Code (Просмотр кода). Пока он пустой и содержит только конструктор. Поскольку C# поддерживает перегрузку методов, то мы можем создать несколько методов и конструкторов с разными параметрами и в зависимости от ситуации вызывать один из них. Итак, изменим файл кода второй формы на следующий:

Using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp { public partial class Form2: Form { public Form2() { InitializeComponent(); } public Form2(Form1 f) { InitializeComponent(); f.BackColor = Color.Yellow; } } }

Фактически мы только добавили здесь новый конструктор public Form2(Form1 f) , в котором мы получаем первую форму и устанавливаем ее фон в желтый цвет. Теперь перейдем к коду первой формы, где мы вызывали вторую форму и изменим его на следующий:

Private void button1_Click(object sender, EventArgs e) { Form2 newForm = new Form2(this); newForm.Show(); }

Поскольку в данном случае ключевое слово this представляет ссылку на текущий объект - объект Form1, то при создании второй формы она будет получать ее (ссылку) и через нее управлять первой формой.

Теперь после нажатия на кнопку у нас будет создана вторая форма, которая сразу изменит цвет первой формы.

Мы можем также создавать объекты и текущей формы:

Private void button1_Click(object sender, EventArgs e) { Form1 newForm1 = new Form1(); newForm1.Show(); Form2 newForm2 = new Form2(newForm1); newForm2.Show(); }

При работе с несколькими формами надо учитывать, что одна из них является главной - которая запускается первой в файле Program.cs. Если у нас одновременно открыта куча форм, то при закрытии главной закрывается все приложение и вместе с ним все остальные формы.


Close