მთავარი / ინტერნეტი / დააკავშირეთ ორი ფორმა გ. ფორმების დამატება. ფორმებს შორის ურთიერთქმედება. შექმენით ერთი ელემენტის ფორმა ან დეტალების ფორმა

დააკავშირეთ ორი ფორმა გ. ფორმების დამატება. ფორმებს შორის ურთიერთქმედება. შექმენით ერთი ელემენტის ფორმა ან დეტალების ფორმა

Ბოლო განახლება: 31.10.2015

პროექტში სხვა ფორმის დასამატებლად დააწკაპუნეთ მაუსის მარჯვენა ღილაკით პროექტის სახელზე Solution Explorer ფანჯარაში და აირჩიეთ Add (Add)->Windows Form...

მოდით მივცეთ ახალ ფორმას რაიმე სახელი, მაგალითად, Form2.cs:

ასე რომ, პროექტს დავამატეთ მეორე ფორმა. ახლა შევეცადოთ განვახორციელოთ ურთიერთქმედება ორ ფორმას შორის. ვთქვათ, პირველი ფორმა გამოიძახებს მეორე ფორმას, როდესაც დააჭირეთ ღილაკს. პირველ რიგში, მოდით დავამატოთ ღილაკი პირველი ფორმის Form1-ს და ორჯერ დააწკაპუნოთ ღილაკზე, რომ გადავიდეთ კოდის ფაილზე. ასე რომ, ჩვენ შევალთ ღილაკზე დაწკაპუნების მოვლენის დამმუშავებელში, რომელიც იქმნება ნაგულისხმევად ღილაკზე ორჯერ დაწკაპუნების შემდეგ:

პირადი void button1_Click(ობიექტის გამგზავნი, EventArgs e) ( )

ახლა დავუმატოთ მას მეორე ფორმის ზარის კოდი. ჩვენს მეორე ფორმას ჰქვია Form2, ასე რომ, ჯერ ვქმნით ამ კლასის ობიექტს, შემდეგ კი ჩვენ მოვუწოდებთ Show მეთოდს, რათა გამოჩნდეს იგი ეკრანზე:

Private void button1_Click(ობიექტის გამგზავნი, EventArgs e) ( Form2 newForm = new Form2(); newForm.Show(); )

ახლა პირიქით მოვიქცეთ - ისე, რომ მეორე ფორმა პირველზე იმოქმედოს. მაშინ როცა მეორე ფორმამ არ იცის პირველის არსებობის შესახებ. ამის გამოსასწორებლად, თქვენ უნდა როგორმე გადაიტანოთ ინფორმაცია პირველი ფორმის შესახებ მეორე ფორმაში. ამისათვის ჩვენ გამოვიყენებთ ფორმის ბმულის გადაცემას კონსტრუქტორში.

ამიტომ გადავიდეთ მეორე ფორმაზე და გადავიდეთ მის კოდზე - დააწკაპუნეთ ფორმაზე მარჯვენა ღილაკით და აირჩიეთ View Code (View code). მაშინ როცა ის ცარიელია და შეიცავს მხოლოდ კონსტრუქტორს. ვინაიდან C# მხარს უჭერს მეთოდის გადატვირთვას, ჩვენ შეგვიძლია შევქმნათ მრავალი მეთოდი და კონსტრუქტორი სხვადასხვა პარამეტრით და გამოვიძახოთ ერთი მათგანი სიტუაციიდან გამომდინარე. მაშ ასე, შევცვალოთ მეორე ფორმის კოდის ფაილი შემდეგში:

სისტემის გამოყენება; System.Collections.Generic-ის გამოყენებით; System.ComponentModel-ის გამოყენებით; System.Data-ს გამოყენებით; System.Drawing-ის გამოყენებით; System.Linq-ის გამოყენებით; System.Text-ის გამოყენებით; System.Threading.Tasks-ის გამოყენებით; System.Windows.Forms-ის გამოყენებით; სახელთა სივრცე HelloApp ( საჯარო ნაწილობრივი კლასი Form2: Form ( საჯარო Form2() ( InitializeComponent(); ) public Form2(Form1 f) (InitializeComponent(); f.BackColor = Color.Yellow; ) )

სინამდვილეში, ჩვენ უბრალოდ დავამატეთ აქ ახალი კონსტრუქტორი public Form2(Form1 f) , სადაც ვიღებთ პირველ ფორმას და ვაყენებთ მის ფონს ყვითლად. ახლა მოდით გადავიდეთ პირველი ფორმის კოდზე, სადაც გამოვიძახეთ მეორე ფორმა და შევცვალოთ იგი შემდეგში:

პირადი void button1_Click(ობიექტის გამგზავნი, EventArgs e) ( Form2 newForm = new Form2(this); newForm.Show(); )

რადგანაც ამ საქმესეს საკვანძო სიტყვა წარმოადგენს ბმულს მიმდინარე ობიექტთან - Form1 ობიექტთან, შემდეგ მეორე ფორმის შექმნისას მიიღებს მას (ბმულს) და მართავს პირველ ფორმას მისი მეშვეობით.

ახლა ღილაკზე დაჭერის შემდეგ შევქმნით მეორე ფორმას, რომელიც მაშინვე შეცვლის პირველი ფორმის ფერს.

ჩვენ ასევე შეგვიძლია შევქმნათ ობიექტები მიმდინარე ფორმისთვის:

პირადი void button1_Click(ობიექტის გამგზავნი, EventArgs e) ( Form1 newForm1 = new Form1(); newForm1.Show(); Form2 newForm2 = new Form2(newForm1); newForm2.Show(); )

მრავალ ფორმასთან მუშაობისას გაითვალისწინეთ, რომ ერთ-ერთი მათგანია მთავარი - რომელიც პირველად იხსნება Program.cs ფაილში. თუ ჩვენ გვაქვს ერთდროულად გახსნილი ფორმების თაიგული, მაშინ როდესაც მთავარი იხურება, იხურება მთელი აპლიკაცია და მასთან ერთად ყველა სხვა ფორმა.

თუ თქვენ გაქვთ მრავალი ელემენტის გრძელი ფორმა, ზოგჯერ შეიძლება დაგჭირდეთ სწრაფად გაბურღოთ, რომ ნახოთ მეტი ინფორმაცია რომელიმე ელემენტის შესახებ. Access-ში ეს მოითხოვს კავშირის დამყარებას მრავალერთეულ ფორმასა და ერთერთეულ ფორმას შორის. როდესაც ირჩევთ ერთეულს მრავალ ელემენტის ფორმაში, იხსნება ერთი ელემენტის ფორმა და აჩვენებს დამატებით დეტალებს.

შენიშვნები:

შექმენით ფორმები

უმეტეს შემთხვევაში, მარცვლოვანი კონფიგურაციის ორი ფორმა ეფუძნება იმავე ცხრილს ან მოთხოვნას. თუ თქვენ უკვე გაქვთ რამდენიმე ფორმა, რომელიც უნდა გამოიყენოთ (ერთი არის ცხრილის ან მრავალპუნქტიანი ფორმა და მეორე არის ცალკეული ელემენტის ან დეტალების ფორმა), შეგიძლიათ გამოტოვოთ ეს განყოფილება. წინააღმდეგ შემთხვევაში, გამოიყენეთ შემდეგი პროცედურები მათ შესაქმნელად.

შექმენით ცხრილის ფორმა ან ფორმა მრავალი ელემენტით

    ნავიგაციის პანელში აირჩიეთ ცხრილი ან მოთხოვნა, რომელიც შეიცავს მონაცემებს, რომელთა ჩვენებაც გსურთ ცხრილის სახით.

    აირჩიეთ ელემენტი შემოქმედება > სხვა ფორმები, და მერე - მრავალი ელემენტიან მაგიდასასურველი ფორმის მიხედვით.

    შეინახეთ და დახურეთ ფორმა.

მრავალი ელემენტის ფორმების შესახებ დამატებითი ინფორმაციისთვის იხილეთ ფორმის შექმნა მრავალი ელემენტის ხელსაწყოს გამოყენებით.

შექმენით ერთი ელემენტის ფორმა ან დეტალების ფორმა

    ნავიგაციის პანელში დააწკაპუნეთ ცხრილზე ან მოთხოვნაზე, რომელიც შეიცავს მონაცემებს, რომელთა ჩვენება გსურთ დეტალების ფორმაში. სავარაუდოდ, ეს იქნება იგივე ცხრილი ან მოთხოვნა, რომელიც გამოიყენეთ პირველი ფორმისთვის.

    აირჩიეთ ელემენტი შემოქმედება > Ფორმა.

    შეიტანეთ საჭირო ცვლილებები, შეინახეთ და დახურეთ ფორმა.

დამატებითი ინფორმაციისთვის იხილეთ ფორმის შექმნა Shape ინსტრუმენტით.

ლოგიკის დამატება დეტალების ფორმის გასახსნელად

ახლა ვნახოთ, როგორ დავამატოთ პატარა მაკრო მრავალ ელემენტის ან ცხრილის ფორმას, რომელიც გახსნის დეტალების ფორმას და აჩვენებს სწორ ელემენტს.

არ ინერვიულოთ, თუ დიდი გამოცდილება არ გაქვთ მაკროებთან. თქვენ შეგიძლიათ უბრალოდ დააკოპიროთ და ჩასვათ XML ამ სტატიის პროცედურისგან.

    თუ იყენებთ ცხრილის ფორმას, ორჯერ დააწკაპუნეთ მასზე ნავიგაციის პანელში გასახსნელად. მრავალ პუნქტიანი ფორმისთვის დააწკაპუნეთ მასზე მარჯვენა ღილაკით ნავიგაციის პანელში და აირჩიეთ განლაგების რეჟიმი.

    დააჭირეთ F4 ღილაკს, რათა გახსნათ თვისებების ფანჯარა, თუ ის უკვე არ არის გახსნილი.

    დააწკაპუნეთ სვეტზე, სადაც გსურთ მაკროს დამატება. ეს უნდა იყოს სვეტი, რომელზეც დაწკაპუნებისას გაიხსნება დეტალების ფორმა მაკროს გაშვების შემდეგ. ზემოთ მოცემულ სურათზე მაკრო ემატება frmContactList სვეტს.

რჩევა:(TIP) შეგიძლიათ დაამატოთ მაკროები მრავალ სვეტში.

კომპიუტერულ მონაცემთა ბაზებში მაკროების შესახებ დამატებითი ინფორმაციისთვის იხ


გასაგებია, რომ თუ შექმნით ტიპის მაჩვენებელს<что там>::ფორმა იმუშავებს, მაგრამ მჭირდება უკვე შექმნილი ფორმა, ღილაკებით და ა.შ. (ზოგადად, სხვადასხვა კონტროლი), მაგრამ ხელით (ანუ პროგრამულად) არ მინდა მათი დანიშვნა სუფთა ფორმაზე (ბევრი წერია და არა ის ფაქტი, რომ სწორად გაიგეთ). ეს არის ის, რაც ჯერ კიდევ მაწუხებს ....... როდესაც ფორმა დავამატე უკვე შექმნილ პროექტს, ახალი სათაურის ფაილში Form2.h ასე ეწერა:

#პრაგმა ერთხელ
#include "Form1.h"

სახელთა სივრცის სისტემის გამოყენებით;



სახელთა სივრცის გამოყენებით System::Data;

სახელთა სივრცე My1(

///
/// შეჯამება Form2-ისთვის



საჯარო ref კლასი Form2: public System::Windows::Forms::Form
{
საჯარო:
ფორმა2 (ბათილი)
{
InitializeComponent();

}

დაცულია:

~ფორმა2()
{
თუ (კომპონენტები)
{
კომპონენტების წაშლა;
}
}

პირადი:



///
{
this->components = gcnew System::ComponentModel::Container();
this->Size = System::Drawing::Size(300,300);
this->Text = L"Form2";
this->Padding = System::Windows::Forms::Padding(0);
ეს ->
}
#პრაგმაენდრიონი
};
}

თუმცა Form1.h-ში ასე წერია:

#პრაგმა ერთხელ
#include "Form2.h"

სახელთა სივრცე My1(

სახელთა სივრცის სისტემის გამოყენება;
სახელთა სივრცის გამოყენებით System::ComponentModel;
სახელთა სივრცის გამოყენებით System::Collections;
სახელთა სივრცის გამოყენებით System::Windows::Forms;
სახელთა სივრცის გამოყენებით System::Data;
სახელთა სივრცის გამოყენებით System::Drawing;

///
/// შეჯამება Form1-ისთვის
/// გაფრთხილება: თუ შეცვლით ამ კლასის სახელს, თქვენ უნდა შეცვალოთ
/// "Resource File Name" თვისება მართული რესურსის შემდგენელი ხელსაწყოსთვის
/// ასოცირდება ყველა .resx ფაილთან, რომელზედაც დამოკიდებულია ეს კლასი. წინააღმდეგ შემთხვევაში,
/// დიზაინერები ვერ შეძლებენ სწორად ურთიერთქმედებას ლოკალიზებულთან
/// რესურსები, რომლებიც დაკავშირებულია ამ ფორმასთან.
საჯარო ref კლასი Form1: public System::Windows::Forms::Form
{
საჯარო:
ფორმა 1 (ბათილი)
{
InitializeComponent();
//TODO: დაამატეთ კონსტრუქტორის კოდი აქ
}

დაცულია:
/// გაასუფთავეთ ნებისმიერი გამოყენებული რესურსი.
~ფორმა1()
{
თუ (კომპონენტები)
{
კომპონენტების წაშლა;
}
}
პირადი: System::Windows::Forms::Button^ button1;
დაცულია:

პირადი:
/// საჭირო დიზაინერის ცვლადი.
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer-ის გენერირებული კოდი
/// აუცილებელი მეთოდი დიზაინერის მხარდაჭერისთვის - არ შეიცვალოს
/// ამ მეთოდის შინაარსი კოდის რედაქტორით.
void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
// ღილაკი 1
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);
// ფორმა1
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"ფორმა1";
this->ResumeLayout(false);

}
#პრაგმაენდრიონი

Static System::Windows::Forms::Form ^frm = gcnew System::Windows::Forms::Form();
პირადი: System:: Void button1_Click(System::Object^ გამგზავნი, System::EventArgs^ e) (
frm->ჩვენება();
}
};
}

სხვადასხვა ადგილას სახელთა სივრცის კავშირი რეგულირდება!