ProjectForStudy

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

[ถาม/ตอบ] ไม่สามารถเปิดฟอร์มได้ C#

[คัดลอกลิงก์]
  • อารมณ์วันนี้
    แฮปปี้
    2018-8-24 10:57
  • เช็คชื่อแล้ว: 3 วัน

    [LV.2]BeginnerI

    1

    กระทู้

    4

    โพสต์

    5

    เครดิต

    BabyGhost

    Rank: 1

    เครดิต
    5
    Ticket
    5
    จิตพิสัย
    0
    1. จะเปิดฟอร์มใหม่ จากโค้ดข้างต้น
    2 แต่เปิดไม่ได้ ขึ้นแบบนี้

    3. นี้อีกฟอร์มที่พยายามเปิดครับ


    รบกวนด้วยครับ ขอบคุณครับ
    (ปล.เพิ่งใหม่ถ้าผิดพลาดประการใดขออภัยไว้ด้วยนะครับ)







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

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

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

    [LV.9]ConquerorII

    30

    กระทู้

    773

    โพสต์

    4579

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

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

    Merciful MemberInstructor

    puklit โพสต์ 2018-8-16 16:44:05 | ดูโพสต์ทั้งหมด
    ใช้วิธีผมก็ได้ครับ
    1. สร้าง Class form ขึ้นมา หลักการของมันคือ
    มันจะตรวจสอบว่าฟอร์มถูกเปิดใช้งานในฟอร์มแม่หรือยัง
    หากยังไม่เปิดฟอร์ม ให้ Show
    หากเปิดฟอร์มแล้ว ให้ Active
    หมายเหตุ : FMain.ActiveForm ให้ท่านเปลี่ยนเป็นชื่อฟอร์มหลักของ Project ท่าน
    1. public class ClsForm
    2.     {

    3.         #region (Form Control Show & Active)

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

    7.             FormCollection fc = Application.OpenForms;

    8.             foreach (Form frm in fc)
    9.             {
    10.                 if (frm.Name == name)
    11.                 {
    12.                     return true;
    13.                 }
    14.             }
    15.             return false;

    16.         }

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

    20.             try
    21.             {
    22.                 Form objForm;
    23.                 String sValue;
    24.                 string FullTypeName;
    25.                 Type FormInstanceType;

    26.                 sValue = frm;

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

    37.         }

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

    41.             FormCollection fc = Application.OpenForms;
    42.             foreach (Form Afrm in fc)
    43.             {
    44.                 if (Afrm.Name == frm)
    45.                 {
    46.                     Afrm.MdiParent = FMain.ActiveForm;
    47.                     Afrm.Activate();
    48.                 }
    49.             }

    50.         }

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

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


    64.         #endregion

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


    2. วิธีเรียกใช้งาน ประกาศตัวแปร ClsForm frm = new ClaForm(); ไว้บนสุดของฟอร์มหลัก
    วิธีเรียกใช้งานก็ให้เรียก Method  public void Show_Active(string frm) ชื่อฟอร์มจะเป็น string
    1. // ฟอร์ม frmEmployee
    2. private void toolstripButton5_Click(object sender, EventArgs e)
    3. {
    4.    frm.Show_Active("frmEmployee");
    5. }

    6. // ฟอร์ม frmCustomer
    7. private void toolstripButton3_Click(object sender, EventArgs e)
    8. {
    9.    frm.Show_Active("frmCustomer");
    10. }

    11. // ฟอร์ม frmSale
    12. private void toolstripButton5_Click(object sender, EventArgs e)
    13. {
    14.    frm.Show_Active("frmSale");
    15. }
    คัดลอกไปที่คลิปบอร์ด


    มันจะเพิ่มความยืดหยุ่นในการเรียกฟอร์มจากทางอื่น เช่น Treeview / Datagridview ที่โหลดชื่อฟอร์ม
    มาจาก Database การทำเมนูที่เรียกฟอร์มขึ้นมาแสดงตามสิทธิ์ของผู้ใช้งานได้รับอนุญาตให้เข้าใช้งาน
    เป็นต้น ท่านลองเอาไปประยุกต์ใช้งานดูครับ



    คะแนน

    จำนวนผู้เข้าร่วม 1Ticket +10 ย่อ เหตุผล
    vbpossible + 10 ถูกใจ

    ดูบันทึกคะแนน

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

    [LV.9]ConquerorII

    30

    กระทู้

    773

    โพสต์

    4579

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

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

    Merciful MemberInstructor

    puklit โพสต์ 2018-8-17 08:28:05 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย puklit เมื่อ 2018-8-17 08:29

    อันนี้เป็น VB.NET ครับClass Form
    1. Public Class ClsForm

    2.     'แสดงฟอร์มแบบเรียกชื่อฟอร์ม Show
    3.     Private Sub Show_Form(Form_Name As String)

    4.         Try

    5.             Dim objForm As Form
    6.             Dim sValue As String
    7.             Dim FullTypeName As String
    8.             Dim FormInstanceType As Type

    9.             sValue = Form_Name
    10.             FullTypeName = Application.ProductName & "." & sValue
    11.             FormInstanceType = Type.GetType(FullTypeName, True, True)
    12.             objForm = TryCast(Activator.CreateInstance(FormInstanceType), Form)
    13.             objForm.MdiParent = FMain.ActiveForm
    14.             objForm.Show()

    15.         Catch

    16.             MessageBox.Show("ไม่พบฟอร์ม : " & Form_Name & " ที่คุณระบุ", "เกิดข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

    17.         End Try


    18.     End Sub

    19.     'เรียกฟอร์มที่เปิดอยู่กลับมา Active
    20.     Private Sub Active_Form(Form_Name As String)

    21.         Dim fc As FormCollection = Application.OpenForms

    22.         For Each frm As Form In fc

    23.             If frm.Name = Form_Name Then

    24.                 frm.MdiParent = FMain.ActiveForm
    25.                 frm.Activate()
    26.                 frm.WindowState = FormWindowState.Normal
    27.                 Exit Sub

    28.             End If

    29.         Next

    30.     End Sub

    31.     'ตรวจสอบฟอร์มถูกเปิดใช้งานอยู่หรือไม่ True = พบฟอร์มที่เปิดอยู่ / False ไม่พบฟอร์มที่เปิดอยู่
    32.     Private Function Check_Opened_Form(Form_Name As String) As Boolean

    33.         Dim fc As FormCollection = Application.OpenForms

    34.         For Each frm As Form In fc

    35.             If frm.Name = Form_Name Then
    36.                 Return True
    37.             End If

    38.         Next

    39.         Return False

    40.     End Function

    41.     'เรียกฟอร์มขึ้นมา Show / Active
    42.     Public Sub Show_Active(Form_Name As String)

    43.         'ถ้าฟอร์มยังไม่ถูกเปิดให้ Show
    44.         If Check_Opened_Form(Form_Name) = False Then

    45.             Show_Form(Form_Name)

    46.         Else 'หากเปิดแล้วให้ Active

    47.             Active_Form(Form_Name)

    48.         End If

    49.     End Sub

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


    เรียก Method Public Sub Show_Active(Form_Name As String) สำหรับเปิดฟอร์ม


    1. Dim frm as new ClsForm
    2. frm.Show_Active("ชื่อฟอร์ม")
    คัดลอกไปที่คลิปบอร์ด



    คะแนน

    จำนวนผู้เข้าร่วม 1Ticket +5 ย่อ เหตุผล
    vbpossible + 5 ถูกใจ

    ดูบันทึกคะแนน

  • อารมณ์วันนี้
    สู้
    5 วันที่แล้ว
  • เช็คชื่อแล้ว: 125 วัน

    [LV.7]JuniorIII

    4

    กระทู้

    175

    โพสต์

    549

    เครดิต

    TeenLion

    Rank: 3Rank: 3

    เครดิต
    549
    Ticket
    146
    จิตพิสัย
    403
    supean โพสต์ 2019-3-30 10:58:57 | ดูโพสต์ทั้งหมด
    ดีครับ
  • อารมณ์วันนี้
    สู้
    เมื่อวาน 17:13
  • เช็คชื่อแล้ว: 70 วัน

    [LV.6]JuniorII

    0

    กระทู้

    150

    โพสต์

    637

    เครดิต

    TeenLion

    Rank: 3Rank: 3

    เครดิต
    637
    Ticket
    230
    จิตพิสัย
    407
    potter_t โพสต์ 2019-7-11 17:06:21 | ดูโพสต์ทั้งหมด
    puklit ตอบกลับเมื่อ 2018-8-16 16:44
    ใช้วิธีผมก็ได้ครับ
    1. สร้าง Class form ขึ้นมา หลักการของมั ...

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

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

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

    GMT+7, 2019-10-16 17:02 , Processed in 0.055247 second(s), 28 queries .

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

    © 2001-2013 Comsenz Inc.

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