|
|

หน้าจอการออกแบบ Design Time ...

การรันโปรแกรมด้วย Visual Basic .Net (2010) ...

การรันโปรแกรมด้วย Visual Basic .Net (2026) Community Edition หน้าจอขนาด 1600 x 900 พิกเซล ...

การรันโปรแกรมกับหน้าจอขนาด 1366 x 768 พิกเซล ...
หลักการออกแบบ Resize Form และ Control
การ Resize ไม่ใช่การย่อหรือขยาย Control ตามใจ แต่เป็นการคำนวณอัตราส่วน (Scale) จากขนาดฟอร์มต้นฉบับเทียบกับขนาดฟอร์มปัจจุบัน แล้วนำอัตราส่วนนั้นไปปรับตำแหน่ง (Location), ขนาด (Size) และ ขนาดตัวอักษร (Font) ของ Control ทุกตัว โดยอ้างอิงจากค่าต้นฉบับที่บันทึกไว้ครั้งแรกเสมอ เพื่อป้องกันการสะสมของความคลาดเคลื่อนจากการ Resize หลายครั้ง วิธีนี้ทำให้ทุก Control ยังคงสัดส่วนเดิม และรองรับการแสดงผลบนหน้าจอที่มีความละเอียดแตกต่างกันได้อย่างถูกต้อง
แนวคิดของการทำ Resize Form
1. บันทึกขนาดและตำแหน่งเดิมของ Form และ Control ทุกตัว
2. คำนวณอัตราส่วนการย่อ/ขยาย (Scale X, Scale Y) จากขนาดฟอร์มปัจจุบัน
3. ปรับ Location, Size และ Font โดยอ้างอิงจากค่าต้นฉบับเสมอ
4. ห้ามนำค่าที่ Resize แล้วมาใช้คำนวณซ้ำ เพื่อป้องกันความคลาดเคลื่อนสะสม
5. ผลลัพธ์คือ UI ยังคงสัดส่วนเดิมและรองรับหลายความละเอียดหน้าจอได้อย่างถูกต้อง
*** อาจจะเกิดปัญหาในการสั่งรันโปรแกรมในตอนแรกๆ ลองเลือก Build, Rebuild และ Clean Solution ก่อนครับ ***
มาดูโค้ดในส่วนของฟอร์มหลัก ซึ่งใช้การ Design Time ทั้งหมด (frmResizeDemo.vb) ...
- Public Class frmResizeDemo
- Inherits Form ' สืบทอด Form
- ' ----------------------------------------------------------
- ' ตัวแปรระดับคลาส ตัวช่วย Resize
- ' ----------------------------------------------------------
- Private Resizer As ResizeHelper
- ''' <summary>
- ''' ตัวสร้างฟอร์ม เรียกใช้เมื่อสร้างวัตถุของฟอร์มนี้
- ''' </summary>
- Public Sub New()
- ' เรียกใช้เมธอดที่สร้างคอนโทรลทั้งหมดบนฟอร์ม
- ' (เมธอดนี้ถูกสร้างโดย Visual Studio Designer)
- InitializeComponent()
- ' สร้างวัตถุ ResizeHelper เพื่อใช้จัดการการปรับขนาด
- Resizer = New ResizeHelper()
- End Sub
- ''' <summary>
- ''' Event: เกิดขึ้นเมื่อฟอร์มถูกโหลดครั้งแรก
- ''' ใช้สำหรับเตรียมข้อมูลและตั้งค่าเริ่มต้น
- ''' </summary>
- Private Sub frmResizeDemo_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- '-----------------------------------------------------
- ' เพิ่มเติม:
- ' Control ต่างๆที่อยู่บนฟอร์ม จะอยู่ใต้ Panel หลัก
- '-----------------------------------------------------
- ' ข้อมูลตัวอย่าง
- cboCountry.SelectedIndex = 0
- ' กำหนดค่าเริ่มต้นให้ DateTimePicker
- dtpBirthDate.Value = DateTime.Now.AddYears(-20)
- '-----------------------------------------------------
- ' สำคัญมาก
- ' ต้องเรียกหลังจาก Control ถูกสร้างครบแล้ว
- ' เพื่อเก็บตำแหน่งเริ่มต้นของทุก Control
- '-----------------------------------------------------
- Resizer.SaveOriginalProperties(Me)
- End Sub
- ''' <summary>
- ''' Event: เกิดขึ้นเมื่อฟอร์มมีการปรับขนาด (เช่น ผู้ใช้ลากขอบฟอร์ม)
- ''' ใช้สำหรับปรับขนาดคอนโทรลตามสัดส่วน
- ''' </summary>
- Private Sub FormDemo_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize
- '-----------------------------------------------------
- ' ตรวจสอบว่ามีตัวช่วยปรับขนาดหรือไม่ และบันทึกข้อมูลหรือยัง
- ' ทุกครั้งที่ Form เปลี่ยนขนาด ให้ปรับ Controls ทั้งหมด
- '-----------------------------------------------------
- If Resizer IsNot Nothing Then Resizer.AdjustControls(Me)
- End Sub
- Private Sub btnSave_Click(sender As Object, e As System.EventArgs) Handles btnSave.Click
- MessageBox.Show("ทดสอบเหตุการณ์ในการกดปุ่มคำสั่ง.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- End Sub
- Private Sub btnCancel_Click(sender As Object, e As System.EventArgs) Handles btnCancel.Click
- Me.Close()
- End Sub
- Private Sub frmResizeDemo_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- GC.SuppressFinalize(Me)
- Application.Exit()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
โค้ดในส่วน Class ของการย่อขยายขนาดของฟอร์มและคอนโทรล (ResizeHelper.vb) ...
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) + .Net Framework 4.0 ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|