ProjectForStudy

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 152|ตอบกลับ: 10

[ถาม/ตอบ] สอบถามเรื่องการเปิดฟอร์ม ด้วยการเลือกรายการ dropdown หรือ textbox ครับ สามารถทำได้ไหมครับ

[คัดลอกลิงก์]
  • อารมณ์วันนี้
    ง่วง
    2019-10-5 09:56
  • เช็คชื่อแล้ว: 165 วัน

    [LV.7]JuniorIII

    23

    กระทู้

    266

    โพสต์

    498

    เครดิต

    TeenLion

    Rank: 3Rank: 3

    เครดิต
    498
    Ticket
    270
    จิตพิสัย
    228
    ผมได้ทดลองการเลือกรายการการเพื่อเปิดฟอร์ม ได้ลองทำแล้วมันเป็นการเปิดฟฟอร์มใหม่เลย ไม่ได้เปิดฟอร์มที่เราเลือก พอมีวิธีไหมครับ

    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
    as.rockchat
  • อารมณ์วันนี้
    แฮปปี้
    8 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 384 วัน

    [LV.9]ConquerorII

    30

    กระทู้

    773

    โพสต์

    4579

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    4579
    Ticket
    2851
    จิตพิสัย
    1728

    Merciful MemberInstructor

    puklit โพสต์ 2019-7-24 09:48:08 | ดูโพสต์ทั้งหมด
    ก่อนอื่นท่านต้องเข้าใจแนวคิดและหลักของ OOP ก่อน

    Form1 ที่ท่านสร้างขึ้นมา เปรียบเสมือนพิมพ์เขียว หรือ แบบแปลนบ้าน ซึ่งมันสามารถนำไปสร้างบ้านได้หลาย ๆ หลัง ด้วยคำสั่ง New
    เมื่อท่านสร้าง Object (วัตถุ ของฟอร์ม ด้วย) Dim frm as New Form1()

    คำว่า New เมื่อท่านกดปุ่มเพื่อเปิดฟอร์มครั้งที่1 ก็จะได้ Form1 ขึ้นมาแสดง 1 หน้าต่าง
    พอกดปุ่ม เพื่อเปิดฟอร์ม 1 ครั้งต่อไปมันจะไม่เปิดฟอร์มเดิมที่เปิดไว้อยู่ก่อนหน้าแล้ว เนื่องจากมันคนละ Object กัน จากคำสั่ง New


    หวังว่าท่านคงเข้าใจในสิ่งที่ผมอธิบายนะครับ

    ส่วนโค้ดตัวอย่างตามกระทู้นี้เป็นคลาสที่ผมสร้างขึ้นมาเพื่อตรวจสอบการเปิดฟอร์มที่อยู่ใน MDI Form คือมีฟอร์มแม่แล้วเรียกเปิดฟอร์มลูก
    1. ถ้ายังไม่ได้เปิดให้สั่งเปิดฟอร์มขึ้นมา (Show form)
    2. หากเปิดฟอร์มอยู่แล้วให้แสดงฟอร์มที่เปิดอยู่ (Active form)

    http://www.projectforstudy.com/thread-1590-1-1.html
  • อารมณ์วันนี้
    สู้
    เมื่อวาน 17:13
  • เช็คชื่อแล้ว: 70 วัน

    [LV.6]JuniorII

    0

    กระทู้

    150

    โพสต์

    637

    เครดิต

    TeenLion

    Rank: 3Rank: 3

    เครดิต
    637
    Ticket
    230
    จิตพิสัย
    407
    potter_t โพสต์ 2019-7-24 09:51:15 | ดูโพสต์ทั้งหมด
    ขอบคุณครับ
  • อารมณ์วันนี้
    ง่วง
    2019-10-5 09:56
  • เช็คชื่อแล้ว: 165 วัน

    [LV.7]JuniorIII

    23

    กระทู้

    266

    โพสต์

    498

    เครดิต

    TeenLion

    Rank: 3Rank: 3

    เครดิต
    498
    Ticket
    270
    จิตพิสัย
    228
     เจ้าของ| as.rockchat โพสต์ 2019-7-24 10:19:50 | ดูโพสต์ทั้งหมด
    ขอบคุณครับ แล้วถ้าไม่ใช้ MdiParent ล่ะครับ โดยเปิดฟอร์มตามที่เรากำหนดชื่อและฟอร์มของมันไว้ ได้ไหมครับ
    as.rockchat
  • อารมณ์วันนี้
    แฮปปี้
    8 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 384 วัน

    [LV.9]ConquerorII

    30

    กระทู้

    773

    โพสต์

    4579

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    4579
    Ticket
    2851
    จิตพิสัย
    1728

    Merciful MemberInstructor

    puklit โพสต์ 2019-7-24 10:29:39 | ดูโพสต์ทั้งหมด
    as.rockchat ตอบกลับเมื่อ 2019-7-24 10:19
    ขอบคุณครับ แล้วถ้าไม่ใช้ MdiParent ล่ะครับ โดยเปิดฟอร์มต ...

    ท่านก็ลองเอาโค้ดผมไปศึกษาแล้วเขียนประยุกต์ใช้งานโดย
    ตั้งโจทย์มาแล้วก็ลองทำดูครับ
  • อารมณ์วันนี้
    ง่วง
    2019-10-5 09:56
  • เช็คชื่อแล้ว: 165 วัน

    [LV.7]JuniorIII

    23

    กระทู้

    266

    โพสต์

    498

    เครดิต

    TeenLion

    Rank: 3Rank: 3

    เครดิต
    498
    Ticket
    270
    จิตพิสัย
    228
     เจ้าของ| as.rockchat โพสต์ 2019-7-24 10:44:42 | ดูโพสต์ทั้งหมด
    ผมลองมาแกะโค้ดดูพอเข้าใจแล้วครับ แต่ไม่ขึ้น ผมเลยเอา try ออก เกิด error ดังภาพครับ

    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
    as.rockchat
  • อารมณ์วันนี้
    แฮปปี้
    8 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 384 วัน

    [LV.9]ConquerorII

    30

    กระทู้

    773

    โพสต์

    4579

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    4579
    Ticket
    2851
    จิตพิสัย
    1728

    Merciful MemberInstructor

    puklit โพสต์ 2019-7-24 11:25:16 | ดูโพสต์ทั้งหมด
    as.rockchat ตอบกลับเมื่อ 2019-7-24 10:44
    ผมลองมาแกะโค้ดดูพอเข้าใจแล้วครับ แต่ไม่ขึ้น ผมเลยเอา try ออก เกิด error ดังภาพครับ

    ที่เปิดฟอร์มยังไม่ขึ้น แสดงว่าท่านยังไม่เข้าใจลำดับการทำงานของโค้ดที่ผมเขียนขึ้นครับ
    จุดแรกที่ท่านควรจะเช็คคือ Functions CheckOpened

    ส่วน Method Show_Frm ยังไงก็มี Error กรณีหากเราเปิด Free ให้ผู้ใช้งานใส่ชื่อฟอร์ม ผมเลยดัก Try Catch เอาไว้ว่าถ้าชื่อ ฟอร์มนอกเหนือจากที่มีอยู่ในโปรแกรมนี้ให้แสดงข้อความครับ โค้ดในส่วนนี้ปรกติดีไม่ต้องไปแก้ไขครับ
  • อารมณ์วันนี้
    แฮปปี้
    8 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 384 วัน

    [LV.9]ConquerorII

    30

    กระทู้

    773

    โพสต์

    4579

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    4579
    Ticket
    2851
    จิตพิสัย
    1728

    Merciful MemberInstructor

    puklit โพสต์ 2019-7-24 11:33:21 | ดูโพสต์ทั้งหมด
    as.rockchat ตอบกลับเมื่อ 2019-7-24 10:44
    ผมลองมาแกะโค้ดดูพอเข้าใจแล้วครับ แต่ไม่ขึ้น ผมเลยเอา try ออก เกิด error ดังภาพครับ

    ส่วนข้างล่างนี้เป็นตัวอย่างผมทำให้เฉพาะท่าน (เพื่อให้เกิดการเรียนรู้สักหน่อยผมจึงเขียนเป็น C# ให้)

    เนื่องจากท่านไม่ได้ใช้ฟอร์ม MDI Form ผมจึงมีการปรับโค้ดจากคลาสเดิมเล็กน้อยเพื่อให้มันมองเห็นฟอร์มที่ถูกเปิดใช้งานอยู่ดังนี้
    กำหนดค่า Properties (Tag) ของฟอร์มให้เหมือนกับชื่อฟอร์ม เนืองจากเราไม่ได้กำหนดเป็นแบบ MDI จึงไม่สามารถทำให้มองเห็น Properties Name ของฟอร์มได้


    ตัวอย่างโค้ดใน ClassForm
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using System.Windows.Forms;

    7. namespace WindowsFormsApp1
    8. {
    9.     class ClassForm
    10.     {

    11.         #region (Form Control Show & Active)

    12.         // ตรวจสอบสถานะฟอร์มถูกเปิดหรือไม่
    13.         private bool CheckOpened(string name)
    14.         {

    15.             foreach (Form frm in Application.OpenForms)
    16.             {
    17.                 if ((string)frm.Tag == name)
    18.                 {
    19.                     return true;
    20.                 }
    21.             }
    22.             return false;

    23.         }

    24.         // เรียกฟอร์มขึ้นมาแสดงตามชื่อฟอร์มที่ระบุ (เปิดฟอร์มใหม่)
    25.         private void Show_Frm(string frm)
    26.         {

    27.             try
    28.             {
    29.                 var sValue = frm;
    30.                 var FullTypeName = Application.ProductName + "." + sValue;
    31.                 var FormInstanceType = Type.GetType(FullTypeName, true, true);
    32.                 var objForm = Activator.CreateInstance(FormInstanceType) as Form;
    33.                 objForm.Show();
    34.             }
    35.             catch
    36.             {
    37.                 MessageBox.Show("Form : " + frm + " not found in system ", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    38.             }

    39.         }

    40.         // ตรวจหาฟอร์มที่ถูกเปิดแล้ว Active อีกครั้ง
    41.         private void Active_Form(string frm)
    42.         {

    43.             FormCollection fc = Application.OpenForms;
    44.             foreach (Form Afrm in fc)
    45.             {
    46.                 if (Afrm.Name == frm)
    47.                 {
    48.                     Afrm.BringToFront();
    49.                 }
    50.             }

    51.         }

    52.         // แสดงฟอร์มตามเงื่อนไข ถ้ายังไม่ถูกเปิด ให้เปิดฟอร์มใหม่ / หากเปิดแล้วเรียก Active ฟอร์ม
    53.         public void Show_Active(string frm)
    54.         {

    55.             if (CheckOpened(frm) == false)
    56.             {
    57.                 Show_Frm(frm);
    58.             }
    59.             else
    60.             {
    61.                 Active_Form(frm);
    62.             }

    63.         }

    64.         #endregion


    65.     }
    66. }
    คัดลอกไปที่คลิปบอร์ด


    ตัวอย่างโค้ดใน ฟอร์มหลักที่มี ComboBox สำหรับเรียกเปิดฟอร์ม
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;

    10. namespace WindowsFormsApp1
    11. {
    12.     public partial class FMain : Form
    13.     {
    14.         public FMain()
    15.         {
    16.             InitializeComponent();
    17.         }

    18.         private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
    19.         {

    20.             ClassForm frm = new ClassForm();
    21.             frm.Show_Active(comboBox1.SelectedItem.ToString());

    22.         }

    23.         private void FMain_Load(object sender, EventArgs e)
    24.         {

    25.             comboBox1.Items.Add("Form1");
    26.             comboBox1.Items.Add("Form2");
    27.             comboBox1.Items.Add("Form3");

    28.         }

    29.     }
    30. }
    คัดลอกไปที่คลิปบอร์ด


    ตัวอย่างโปรแกรมตามที่ท่านต้องการ

    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    ง่วง
    2019-10-5 09:56
  • เช็คชื่อแล้ว: 165 วัน

    [LV.7]JuniorIII

    23

    กระทู้

    266

    โพสต์

    498

    เครดิต

    TeenLion

    Rank: 3Rank: 3

    เครดิต
    498
    Ticket
    270
    จิตพิสัย
    228
     เจ้าของ| as.rockchat โพสต์ 2019-7-24 13:29:41 | ดูโพสต์ทั้งหมด
    ขอบคุณครับ
    as.rockchat
  • อารมณ์วันนี้
    แฮปปี้
    8 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 384 วัน

    [LV.9]ConquerorII

    30

    กระทู้

    773

    โพสต์

    4579

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    4579
    Ticket
    2851
    จิตพิสัย
    1728

    Merciful MemberInstructor

    puklit โพสต์ 2019-7-24 14:35:06 | ดูโพสต์ทั้งหมด
    as.rockchat ตอบกลับเมื่อ 2019-7-24 10:44
    ผมลองมาแกะโค้ดดูพอเข้าใจแล้วครับ แต่ไม่ขึ้น ผมเลยเอา try ออก เกิด error ดังภาพครับ

    ClassForm เขียนเป็น VB.Net ได้ดังนี้ ครับ

    1. Public Class ClassForm

    2.     'ตรวจสอบสถานะฟอร์มถูกเปิดหรือไม่
    3.     Private Function CheckOpened(name As String) As Boolean

    4.         For Each frm As Form In Application.OpenForms

    5.             If CType(frm.Tag, String) = name Then
    6.                 Return True
    7.             End If

    8.         Next

    9.         Return False

    10.     End Function

    11.     ' เรียกฟอร์มขึ้นมาแสดงตามชื่อฟอร์มที่ระบุ (เปิดฟอร์มใหม่)
    12.     Private Sub Show_Frm(frm As String)

    13.         Try

    14.             Dim sValue = frm
    15.             Dim FullTypeName = Application.ProductName & "." & sValue
    16.             Dim FormInstanceType = Type.GetType(FullTypeName, True, True)
    17.             Dim objForm = CType(Activator.CreateInstance(FormInstanceType), Form)
    18.             objForm.Show()

    19.         Catch
    20.             MessageBox.Show("Form : " & frm & " not found in system ", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    21.         End Try

    22.     End Sub


    23.     ' ตรวจหาฟอร์มที่ถูกเปิดแล้ว Active อีกครั้ง
    24.     Private Sub Active_Form(frm As String)

    25.         Dim fc As FormCollection = Application.OpenForms

    26.         For Each Afrm As Form In fc

    27.             If Afrm.Name = frm Then
    28.                 Afrm.BringToFront()
    29.             End If

    30.         Next

    31.     End Sub

    32.     ' แสดงฟอร์มตามเงื่อนไข ถ้ายังไม่ถูกเปิด ให้เปิดฟอร์มใหม่ / หากเปิดแล้วเรียก Active ฟอร์ม
    33.     Public Sub Show_Active(frm As String)

    34.         If CheckOpened(frm) = False Then
    35.             Show_Frm(frm)
    36.         Else
    37.             Active_Form(frm)
    38.         End If

    39.     End Sub

    40. End Class
    คัดลอกไปที่คลิปบอร์ด


    ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

    รายละเอียดเครดิต

    ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|ProjectForStudy  

    GMT+7, 2019-10-16 16:33 , Processed in 0.116770 second(s), 28 queries .

    Powered by Discuz! X3.2 R20150609, Rev.38

    © 2001-2013 Comsenz Inc.

    ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้