Маягт нэмэх. Маягт хоорондын харилцан үйлчлэл

Хэдийгээр microsoft-ийн талаархи миний бодол харааны студиГэсэн хэдий ч заримдаа та үүн дээр ямар нэгэн зүйл хийх хэрэгтэй болдог. Хэрэв бид энэ тохиолдолд C ++ дээр биш, харин C ++ / CLI гэж нэрлэгддэг хэл дээр бичдэгтэй эвлэрэх юм бол ердийн харааны бүрэлдэхүүн хэсгүүдтэй ажиллах нь ижил төстэй зүйлээс тийм ч их ялгаатай байх болно. Борландын орчин. Гэхдээ энэ нь Builder-тэй харьцуулахад асуудал үүсгэж болно.Нэгээс олон форм агуулсан программтай ажиллах ердийн 3 нөхцөл байдлыг авч үзье.Жишээ нь үнэгүй Visual C ++ 2010 Express бөгөөд үндсэн хэлбэр нь Form1 гэсэн анхдагч нэртэй байдаг гэж үздэг.

Маягтыг бүтээх, программчлан дуудах жишээ

Энэ кодыг жишээлбэл Form1 үндсэн хэлбэрийн товчлуур дээр дарж гүйцэтгэж болно.

Form^form2 = gcnew Form(); Button^button2 = gcnewButton(); товчлуур2->Текст = L"OK"; товчлуур2->Байршил = Цэг (10,10); form2->Текст = L"Миний цонх"; form2->HelpButton = үнэн; form2->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; form2->StartPosition = FormStartPosition::CenterScreen; form2->Удирдлага->Нэмэх(товч2); form2->ShowDialog();

Програмаар үүсгэгдсэн товчлуур2-д товшилтын зохицуулагч нэмэхийн тулд кодын сүүлчийн мөрийн өмнө бичнэ үү:

Button2->Click += gcnew System::EventHandler(энэ, &Form1::button2_Click);

Form2->ShowDialog() эсвэл form2->Show() аргыг дуудахын өмнө;

Үүний зэрэгцээ зохицуулагчийн кодыг одоогийн Form1.h модульд байрлуулсан болно:

Хувийн: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) ( MessageBox::Show("Энд"); )

Үндсэн маягтаас өөр маягтыг дуудна уу

Цэсээс Project - Add new element - Form - Form2 гэсэн хэсгийг сонгоно

Оператор нэмье

#"Form2.h"-г оруулах

Form1.h дээрх эхний нэрийн талбарын өмнө (өөрөөр хэлбэл файлын хамгийн эхэнд).

Form1 ангийн нийтийн хэсэгт ангийн жишээнд заагч оруулъя:

Form2^F2;

Бид үүсгэх шаардлагатай кодыг нэмж, хоёр дахь маягтыг дуудъя:

F2=gcnew Form2(); F2->Show();

Хоёрдахь маягтыг програмаар устгахын тулд код тохиромжтой

F2 устгах;

Заагч нь зөвхөн нэг маягтын хаягийг хадгалдаг гэдгийг тэмдэглэх нь зүйтэй бөгөөд энэ нь хамгийн сүүлд үүсгэгдсэн маягт юм. Хэрэв бид энэ кодоор хэд хэдэн маягт дараалан үүсгэсэн бол зөвхөн сүүлчийнх нь устгагдах болно. Эсвэл доор тайлбарласан олон тооны дүрсийг туршиж үзээрэй.

Form1 маягтын ангид шаардлагатай өгөгдлийг тайлбарлая (эндээс, Tabulator төслийн нэр, нэрийн орон зайг шаардлагатай бол өөрийн гараар солино уу):

статик const int MAX_FORMS = 100; // Хамгийн их хэмжээ forms int FormCount; // Маягтын тоолуурын массив ^F2; //Дүрсүүдийн массив руу заагч

Дараа нь бид үндсэн маягтын Load үйл явдлын өгөгдлийг эхлүүлнэ.

FormCount=0; F2 = gcnew массив (MAX_FORM);

Дараа нь бид дараагийн маягтыг үүсгэх кодыг хэрэгжүүлдэг

Хэрэв (FormCount харуулах(); ) else MessageBox::Show("Хэт олон хэлбэр!");

болон түүнийг арилгах:

Хэрэв (FormCount) ( F2 устгах; FormCount--; )

Хэрэв бид хүүхэд маягтуудыг тусад нь биш, харин эцэг эх форм дотор үүсгэхийг хүсвэл Form1 шинж чанарт энэ нь "өвөг" (IsMdiParent шинж чанарыг тохируулах = үнэн) гэдгийг зааж өгөх хэрэгтэй бөгөөд F2-ээр хүүхэд хэлбэрийг харуулах хэрэгтэй. ->Show() оператор, үүнийг хүүхэд Form1 гэж тэмдэглэнэ үү:

F2->MdiParent = энэ;

Хүүхэд хэлбэрээс эцэг эхийн маягтын аргыг дуудах

Бид .cpp файлыг оролцуулалгүйгээр хийж чадахгүй, энэ нь тийм ч муу биш юм - зөв C "shnik-ийн .h файлд код бичих нь ерөнхийдөө эвдэрдэг :)

Үйл явцыг алхам алхмаар задалж үзье.

1) 2 маягт байдаг - Form1 ба Form2 , Form1 дээр Button (button1 , хоёр дахь хэлбэрийг нээх болно) болон Label (label1 , энд бид текстийг өөрчлөх болно). Form2 дээр - товчлуур1 дээр дарснаар label1 дээрх текст өөрчлөгдөх болно.

2) Бид эхний маягтаас хоёр дахь хэлбэр, хоёр дахь хэлбэрээс эхний хэлбэрт хандах шаардлагатай тул хөндлөн лавлагааны асуудал гарч ирнэ (Form1.h нь Form2.h-ийг заах үед энэ нь эргээд дахин хамааралтай болно. Form1.h руу). Үүнээс зайлсхийхийн тулд бид .h файлаас .cpp файл руу хоёр дахь хэлбэрт (Form2) хандах эрхтэй эхний маягтын (Form1) кодыг зөөнө. Тиймээс та Form1.cpp файл үүсгэх хэрэгтэй.

3) Form1.h дээр нийтийн Set аргыг зарласнаар label1-ийн текстийг өөрчлөх боломжтой (кодыг файлын төгсгөлд, #pragma endregion-ын дараа бичиж болно):

Нийтийн: хүчингүй Set(String^ text) ( label1->Text = text; )

4) Form2.h файлд бид Form1.h (эхэнд):

#"Form1.h"-г оруулах

Эхний маягтын лавлагааг хүлээн авч дараа нь ашиглахаар хадгалах бүтээгчийг үүсгэнэ үү:

Form2(Form1^ parent) ( InitializeComponent(); parentForm = эцэг; ) //та доорх холбоосыг нэмж болно: private: Form1^ parentForm;

5) Form2 дээрх товчлуур дээр дарахад бид эх маягтын Set аргыг дуудах болно.

Хувийн: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) ( parentForm->Set("Сайн уу form2"); parentForm->Show(); this->Hide(); )

6) Хоёрдахь хэлбэрийн нээлтийг хийхийн тулд эхний хэлбэрт үлддэг. Үүнийг хийхийн тулд Form1.h-ээс Form1.cpp руу товчлуур товшилтыг шилжүүлж, .h файлд зөвхөн түүний мэдэгдлийг үлдээнэ үү.

Админаар.

C# сурах нь удаан байдаг. гэхдээ энэ нь цаашаа үргэлжилдэг. Саяхан би
Visual C# хэл дээр нэг маягтаас нөгөө хэлбэрийг хэрхэн нээх жишээг өгсөн. Зарчмын хувьд бүх зүйл энгийн байдаг.

Өнөөдөр дараах даалгавар гарч ирэв: програмын үндсэн хэлбэрээс модаль маягтыг эхлүүлэх, энэ маягтыг хаах үед аливаа өгөгдлийг (текст, өмчийн утга гэх мэт) үндсэн маягтын удирдлага руу шилжүүлэх ёстой. Маягтын тухай өмнөх нийтлэлд дурдсан байдлаар энэ асуудлыг шийдэх боломжгүй юм. Энэ тохиолдолд бид бүх шинж чанаруудын хувьд шинэ утгууд бүхий шинэ хэлбэрийн объектыг үүсгэнэ. Аз болоход C # нь гайхалтай хог цуглуулагчтай ... Гэхдээ гол зүйл нь цуглуулагчдаа биш, харин C # хэл дээр хүүхдийн маягтыг хэрхэн нээж, үндсэн зүйл рүүгээ буцах вэ?

Эхлэхийн тулд анхны (анхны) өгөгдлийг тохируулъя.

Тэгэхээр. Бидэнд үндсэн өргөдлийн маягт байна:

Энэ маягт нь мөн TBDialog нэртэй TextBox болон товших товчлуурыг агуулж байгаа бөгөөд бид үүнийг хийх ёстой:

  1. TBDialog-аас TBMain руу Text шинж чанарын утгыг дамжуулах;
  2. fDialog-г хаах;

Одоо ажлын бүх үйл явцыг дарааллаар нь авч үзье.

Эхлээд та C# хэл дээрх бүх шинж чанар, хувьсагч, аргуудыг анхдагч байдлаар өөрчлөгчөөр томилдог гэдгийг үргэлж санаж байх хэрэгтэй. хувийн- тиймээс хоёр дахь хэлбэрээс эхний хэлбэрт шилжихийн тулд бид TBMain дээр өөрчлөгчийг тохируулах хэрэгтэй. олон нийтийнөөрийнхөөрөө. Үүнийг хийхийн тулд маягт үүсгэгчээс TBMain элементийг сонгоод шинж чанаруудын цонх руу очно уу үл хөдлөх хөрөнгийн үнэ цэнийг өөрчлөх Өөрчлөгч -тай хувийндээр олон нийтийн.

Одоо TBMain бусад объектуудад харагдах болно. Бид цаашаа. Маягтыг модаль горимд нээхийн тулд ShowDialog() аргын хоёр сонголтын аль нэгийг ашиглах шаардлагатай.

public DialogResult ShowDialog() ; public DialogResult ShowDialog(IWin32Window эзэмшигч);

Эхний тохиолдолд энэ арга нь одоогийн идэвхтэй цонхыг эзэмшигчээр тохируулсан модаль харилцах цонх болгон маягтыг харуулдаг бөгөөд хоёр дахь тохиолдолд аль хэлбэр нь манай модаль цонхны эзэмшигч болохыг бид бие даан зааж өгч болно.

Жишээлбэл, ShowDialog() аргын хоёр дахь хувилбарыг ашиглаад хоёр дахь хэлбэрийг загвараар харуулъя. Үүнийг хийхийн тулд бид дараахь зүйлийг бичнэ.

Энд би түлхүүр үгийг дахин ашигласан энэ , энэ нь одоогийн объект руу чиглэсэн, i.e. үндсэн маягтыг эзэмшигчээр тохируулах ( fҮндсэн). Одоо бид шууд асуудлаа шийдэж, асуултанд хариулна. үнэ цэнийг нэг хэлбэрээс нөгөө хэлбэрт хэрхэн шилжүүлэх вэ?Хяналт бүр нь гайхалтай шинж чанартай байдаг Эзэмшигч - энэ нь эцэг эх рүү чиглэсэн:

Одоо та төслийг ажиллуулж, хүүхдийн маягт дээрх TextBox-ийн текстийг эхнийх нь TextBox руу төгс шилжүүлсэн эсэхийг шалгах боломжтой. Ямар ч тохиолдолд би жишээнд авч үзсэн төслийн эх кодыг нийтэлдэг.

Заримдаа програмыг ажиллуулах явцад нэг маягтын элементүүдийг нөгөөгөөс нь авч үзэх шаардлагатай болдог. Жишээлбэл, Form1 маягт байдаг бөгөөд үүнээс бид өөр Form2-ийг нээдэг бөгөөд одоо Form2 хэлбэрээр ажиллаж байгаа тул Form1-ийн эх хэлбэрийн элементүүдэд хандах хэрэгтэй. Би үүнийг хийх хэд хэдэн аргыг олсон.

1-р зам. Нийтийн хувьсагч руу лавлагаа дамжуулж байна.

Нэрийн орон зай WindowsApplication1 ( нийтийн хэсэгчилсэн анги Form1: Form ( public Form1() ( InitializeComponent(); ) private void button1_Click(объект илгээгч, EventArgs e) ( Form2 frm = new Form2(); frm.but1 = this.button1; // нэвтрүүлэх Form2 frm.ShowDialog(); ) ) дээрх товчлуур руу холбоно уу.

Form2 дээр холбоосыг дамжуулсан хувьсагч нь Form1-ийн товчлуур1-тэй тохирно

Namespace WindowsApplication1 ( нийтийн хэсэгчилсэн анги Form2: Form ( public Button but1; // энэ хувьсагч нь Form1 public Form2() ( InitializeComponent(); ) private void button1_Click(объект илгээгч, EventArgs e) ( but1)-ын товчлуурын лавлагааг агуулна. Text = "test"; // Form1-ийн товчлуурын1 товчлуур дээрх текстийг өөрчлөх ) ) )

2-р зам. Хүүхдийн маягт руу холбоос дамжуулж байна.

Мөн чанар нь ойролцоогоор ижил, дараа нь 1-р аргаар. Form2 маягтыг нээхдээ бид дараа нь өөрчлөхөөр төлөвлөж буй элементийн холбоосыг оруулдаг.

Нэрийн орон зай WindowsApplication1 ( нийтийн хэсэгчилсэн анги Form1: Form ( public Form1() ( InitializeComponent(); ) private void button1_Click(объект илгээгч, EventArgs e) ( Form2 frm = new Form2(this.button1); // Form2 руу нэвтрэх товчлуурын холбоос frm.ShowDialog(); ) ) )

Одоо Form2 дээр та энэ товчлуурын холбоосыг агуулсан хувьсагч үүсгэх хэрэгтэй бөгөөд түүгээр дамжуулан бид Form1 дээрх товчлуурт хандах болно (мөр 5,7,9, 15).

Namespace WindowsApplication1 ( нийтийн хэсэгчилсэн анги Form2: Form ( private Button but1; // энэ хувьсагч нь Form1 public Form2 дээрх button1 товчлуурын лавлагааг агуулна(Button but) // хувьсагч дахь товчлуурын лавлагааг авах боловч ( but1 = гэхдээ) ; // одоо but1 нь товчлуурын холбоос байх болно InitializeComponent(); ) private void button1_Click(объект илгээгч, EventArgs e) ( but1.Text = "test"; // Form1-ийн товчлуур1 товчлуур дээрх текстийг өөрчлөх ) ) ) )

3-р зам. Эцэг эхийн маягтанд бүрэн нэвтрэх.

Үүнийг хийхийн тулд бид хэд хэдэн файлд өөрчлөлт оруулах хэрэгтэй, гэхдээ нэгэн зэрэг бид эх маягтын бүх элементүүдэд хандах боломжтой бөгөөд 1-р аргын адил элемент бүр рүү холбоос дамжуулах шаардлагагүй болно.

1-р алхам.Файлд Program.csНийтийн хувьсагч f1 үүсгэх (мөр 5).

Нэрийн орон зай WindowsApplication1 ( статик анги Програм ( нийтийн статик Form1 f1; // Form1 статик хүчингүй Main()-ын лавлагааг агуулсан хувьсагч ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(шинэ Form1() ) ;)))

Алхам 2Бид нээж байна Form1.Designer.csҮүний дотор өөр хэлбэрээс хандах шаардлагатай элементүүдийн хувьд бид өөрчилдөг хувийндээр олон нийтийн. Жишээ нь, товчлуур1 товчлуурыг Form1 дээр өөрчлөх боломжтой болгоё.

Нийтийн систем.Windows.Forms.Товчлуур1; // хувийн болгож нийтийн болгож өөрчилсөн

Алхам 3. Form1 маягтыг үүсгэх үед бид f1 хувьсагч руу энэ маягтын лавлагааг оноодог (мөр 7)

Нэрийн орон зай WindowsApplication1 ( нийтийн хэсэгчилсэн анги Form1: Form ( public Form1() ( Program.f1 = энэ; // одоо f1 нь Form1 InitializeComponent(); ) маягтын лавлагаа байх болно. private void button1_Click(объект илгээгч, EventArgs e) ( Form2 frm = шинэ Form2(); frm.ShowDialog(); ) ) )

Алхам 4Одоо та ямар ч хэлбэрээс эсвэл аль ч ангиас Form1 дээр байрлах button1 элемент рүү дараах байдлаар хандаж болно: Program.f1.button1. Жишээлбэл, Form2 дахь товчлуурыг товчлуурын текстийг Form1 болгон өөрчилье.

Нэрийн орон зай WindowsApplication1 ( нийтийн хэсэгчилсэн анги Form2: Form ( public Form2() ( InitializeComponent(); ) private void button1_Click(объект илгээгч, EventArgs e) ( Program.f1.button1.Text = "test"; // Текстийг өөрчлөх маягт товч Form1 )))

Энэ нийтлэлд авч үзсэн асуудал нь авч үзэж буй тодорхой асуудал биш харин хэрэглээний архитектурын сэдэвтэй илүү холбоотой юм. Өгөгдлийг нэг хэлбэрээс нөгөө хэлбэрт шилжүүлэх нь тийм ч хэцүү биш юм. Үүнийг хийхийн тулд өгөгдлийг хүлээн авахыг хүсч буй хяналтыг нээхэд хангалттай, өөрөөр хэлбэл үүнийг нийтийн өөрчлөгчөөр тэмдэглэхэд хангалттай. Түүнчлэн, өөр сонголт хийх боломжтой. Жишээлбэл, эхний хэлбэрт бид хоёр дахь хэлбэрийн объектыг үүсгэгч рүү өөрсдөдөө зориулсан лавлагаа, өөрөөр хэлбэл эхний хэлбэрээс хоёр дахь хэлбэр рүү шилжүүлэх замаар хоёр дахь хэлбэрийн объектыг үүсгэдэг.
SecondForm secondForm = шинэ SecondForm(энэ);
Мэдээжийн хэрэг, үүнийг хийхээсээ өмнө та хоёр дахь хэлбэрийн бүтээгчийн хэт ачааллыг бий болгоход анхаарах хэрэгтэй.

Мөн энэ арга нь нэлээд түгээмэл байдаг. Гэсэн хэдий ч энгийн байдлаараа энэ нь олон боломжит асуудлуудыг авчирдаг бөгөөд тэдгээрийн гол нь капсулын зарчмыг зөрчих явдал юм. Нэг үгээр хэлбэл, хоёр дахь хэлбэр нь эхнийх нь оршин тогтнох талаар юу ч мэдэхгүй байх ёстой бөгөөд үүнээс ч илүүтэйгээр түүнд нөлөөлж чадахгүй байх ёстой.

Энэ асуудлын шийдэл нь маш энгийн. Код руу шууд орцгооё. Дизайнер дээр бид үндсэн маягтыг үүсгэдэг (энэ нь програм эхлэхэд эхлэх болно). Нэгийг тавья Текст хайрцаг, шошгоТэгээд товч.

Товчлуур дээр дарахад хоёр дахь маягт нээгдэх ба үндсэн маягтын текст талбараас бичигдсэн бичвэр хоёр дахь маягтын текст талбарт шилжинэ. Эхэндээ, хоёр дахь хэлбэр нь дараах байдалтай байна.

Эхнийхтэй адил удирдлагатай. Бидэнд илүү зүйл хэрэггүй. Програмын нэвтрэх цэг нь үндсэн маягтыг эхлүүлнэ:

Системийг ашиглах; System.Collections.Generic ашиглах; System.Linq ашиглах; System.Windows.Forms ашиглах; Namespace From1FormTo2 ( статик анги Програм ( // Програмын үндсэн нэвтрэх цэг. static void Main() ( Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(шинэ MainForm()); ) ) )

Үндсэн маягтын код дараах байдалтай байна.

Системийг ашиглах; System.Collections.Generic ашиглах; System.ComponentModel ашиглах; System.Data ашиглах; System.Drawing ашиглах; System.Linq ашиглах; System.Text ашиглах; System.Windows.Forms ашиглах; Namespace From1FormTo2 ( нийтийн хэсэгчилсэн анги MainForm: Маягт ( //хоёр дахь хэлбэр SecondForm secondForm; //constructor public MainForm() ( InitializeComponent(); ) //өгөгдөл дамжуулах үйл явдал зохицуулагч //үндсэн хэлбэрээс хоёр дахь хувийн хүчингүй бол btn_mainForm_Click(object) илгээгч, EventArgs e) ( secondForm = new SecondForm(tb_mainForm.Text.Trim()); secondForm.ShowDialog(); if (secondForm.DialogResult == DialogResult.OK) tb_mainForm.Text = secondForm.ReturnData() ); ))

Үүний дагуу товчлуурыг үйл явдалтай холбохоо бүү мартаарай дарна уу. Энд үндсэн хэлбэрийн ангид талбар бий Хоёр дахь хэлбэр, хоёрдугаар хэлбэрХоёрдахь хэлбэрийн объектыг төлөөлөх A. "Илгээх" товчийг дарахад хоёрдахь маягт үүсч (хэт ачаалалтай байгуулагчийг дуудсан, бид үүнийг дараа үүсгэх болно) аргын дагуу ажиллуулна. ShowDialog(). Энэ тохиолдолд энэ арга нь бидэнд тохиромжтой. Түүнээс гадна, үүний дараа бид хоёр дахь маягтыг хаагаагүй, харин товчлуур дээр нь дарсан эсэхийг шалгах болно. Хэрэв хоёр дахь маягт дээр товчлуурыг дарсан бол эхний маягт нь хоёр дахь маягтаас өгөгдлийг хүлээн авах ёстой. Энэ нь аргыг дуудах замаар хийгддэг ReturnData()хоёр дахь хэлбэрээр.

Одоо хамгийн сонирхолтой хэсэг бол хоёр дахь хэлбэрийн код юм.

Системийг ашиглах; System.Collections.Generic ашиглах; System.ComponentModel ашиглах; System.Data ашиглах; System.Drawing ашиглах; System.Linq ашиглах; System.Text ашиглах; System.Windows.Forms ашиглах; namespace From1FormTo2 ( нийтийн хэсэгчилсэн анги SecondForm: Form ( //хэт ачаалалтай үүсгэгч public SecondForm(string data) ( InitializeComponent(); tb_secondForm.Text = data; ) //өгөгдөл дамжуулах үйл явдал зохицуулагч //хоёр дахь хэлбэрээс үндсэн хэлбэр рүү private void btn_secondForm_Click (объект илгээгч, EventArgs e) ( this.DialogResult = DialogResult.OK; ) //энэ маягтын текст талбар руу хандах нийтийн арга // нийтийн стринг ReturnData() ( буцах (tb_secondForm.Text.Trim()); ) ) )

Таны харж байгаагаар стринг төрлийг хүлээн зөвшөөрдөг бүтээгчийн нэг хэт ачаалал байдаг. Бид TextBox-аас текст дамжуулахыг оролдож байгааг санаарай. Бүтээгч дээр бүрэлдэхүүн хэсгүүдийг эхлүүлэхээр төлөвлөж, текст талбарын текстийг эхний маягтаас дамжуулсан утгад тохируулна. Дараа нь үйл явдалд бүртгүүлнэ үү дарна ууХоёрдахь хэлбэрийн товчлуурын хувьд бид зохицуулагч үүсгэсэн btn_secondForm_Click, ямар ч харилцах цонхны "Ok" товчлуурын ажиллагааг дуурайлган хийдэг. Тиймээс, "Илгээх" товчийг дарснаар (хоёр дахь хэлбэрийн) бид нөхцөлийг биелүүлнэ

(хоёр дахь хэлбэр .DialogResult == DialogResult .OK)

Эхний хэлбэр, тиймээс, аргыг дууддаг secondForm.ReturnData(), бид эхний маягтын текст талбарыг хоёр дахь маягтын текст талбарын утгад тохируулна.

Ажил энэ аргаҮүнд нэмэлт тайлбар хэрэггүй гэж бодож байна. Энэ нь зүгээр л нэг текст талбараас текстийг нууцлахын зэрэгцээ буцаана.

Үүний үр дүнд бид эхний хэлбэрээс хоёр дахь хэлбэрт, хоёр дахь хэлбэрээс эхний хэлбэрт шилжсэн, капсулжуулалтын зарчмыг зөрчихгүй.

Эхний маягтын текст талбарт "aaa" гэсэн текстийг оруулаад товчлуур дээр дарна уу. Та нээгдсэн хоёр дахь хэлбэрээр энэ текстийг түүний текст талбарт харах болно. Текстийг "aaa ppp" болгож өөрчлөхийг оролдоод товчлуур дээр дарна уу. Хоёрдахь маягтыг хаасны дараа хэрхэн яаж хийхийг та харах болно өгөгдсөн текстүндсэн маягтын текст талбарт харагдах болно.

Одоо та маягтуудын хооронд өгөгдөл дамжуулахыг илүү зөв хийх болно гэж бодож байна. Дараагийн өгүүллээр бид ASP.NET програмууд дээр хэрхэн ажилладаг талаар ярих болно.

Сүүлийн шинэчлэлт: 2015.10.31

Төсөлд өөр маягт нэмэхийн тулд Solution Explorer цонхон дээрх төслийн нэр дээр дарна уу (Solution Explorer) баруун товшино уухулганаа аваад Add(Add)->Windows Form... командыг сонгоно.

Шинэ маягтдаа нэр өгье, жишээлбэл, Form2.cs:

Тиймээс бид төсөлд хоёр дахь маягтыг нэмсэн. Одоо хоёр хэлбэрийн харилцан үйлчлэлийг хэрэгжүүлэхийг хичээцгээе. Эхний хэлбэр нь товчлуур дээр дарахад хоёр дахь маягтыг дуудна гэж бодъё. Эхлээд Form1-ийн эхний хэлбэрт товчлуур нэмж, товчлуур дээр хоёр дарж кодын файл руу орно. Тиймээс, бид товчлуур дээр хоёр товшсоны дараа анхдагчаар үүсгэгддэг товчлуурыг дарах үйл явдлын зохицуулагч руу орох болно.

Хувийн хүчингүй болгох товчлуур1_Дарна уу(объект илгээгч, EventArgs e) ( )

Одоо түүнд хоёр дахь маягтын дуудлагын кодыг нэмье. Бидний хоёрдахь хэлбэрийг Form2 гэж нэрлэдэг тул эхлээд энэ ангийн объектыг үүсгээд дараа нь Show аргыг дуудаж дэлгэцэн дээр харуулна.

Хувийн хүчингүй товчлуур1_Дарна уу(объект илгээгч, 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: Маягт ( public Form2() ( InitializeComponent(); ) public Form2(Form1 f) ( InitializeComponent(); f.BackColor = Color.Yellow; ) ) )

Үнэн хэрэгтээ бид дөнгөж сая шинэ нийтийн Form2(Form1 f) бүтээгчийг нэмсэн бөгөөд үүнд бид эхний маягтыг авч, дэвсгэрийг нь шар болгож тохируулсан. Одоо эхний маягтын код руу орж, хоёр дахь маягтыг дуудаж, үүнийг дараах байдлаар өөрчилье.

Хувийн хүчингүй товчлуур1_Дарна уу(объект илгээгч, EventArgs e) ( Form2 newForm = new Form2(энэ); newForm.Show(); )

Учир нь энэ тохиолдолд түлхүүр үгЭнэ нь одоогийн объект болох Form1 объектын лавлагааг илэрхийлдэг бөгөөд дараа нь хоёр дахь маягтыг үүсгэх үед түүнийг (холбоос) хүлээн авч, түүгээр дамжуулан эхний маягтыг удирдах болно.

Одоо товчлуур дээр дарсны дараа бид хоёр дахь маягтыг үүсгэх бөгөөд энэ нь эхний маягтын өнгийг нэн даруй өөрчлөх болно.

Мөн бид одоогийн маягтын объектуудыг үүсгэж болно:

Хувийн хүчингүй товчлуур1_Click(объект илгээгч, EventArgs e) ( Form1 newForm1 = new Form1(); newForm1.Show(); Form2 newForm2 = new Form2(newForm1); newForm2.Show(); )

Олон маягттай ажиллахдаа тэдгээрийн аль нэг нь Program.cs файлд хамгийн түрүүнд нээгддэг гол хэлбэр гэдгийг санаарай. Хэрэв бид хэд хэдэн маягтыг нэгэн зэрэг нээсэн бол гол нь хаагдахад програм бүхэлдээ хаагдах бөгөөд бусад бүх хэлбэрүүд хаагдана.



Ачааж байна...
Топ