تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الحل النهائي لاستخدام برنامجك بأي شاشة مهما كانت دقتها
#1
السلام عليكم و رحمة الله و بركاته 

مشكلة تواجه اغلب المبرمجين و خاصة المبتدئين منهم حيث ان حجم الشاشة او دقة الشاشة كما يسميها البعض تختلف من حاسوب الى اخر  و هذا الاختلاف سيكون مشكلة حيث ستتداخل الازرار و الادوات مع بعضها البعض اذا صغر حجم الشاشة او ستظهر هوامش لا معنى لها اذا كبر الحجم 

و الحل بسيط و هو عبارة عن مجموعة اكواد طويلة قليلا انسخها و اكتبها كما هي عندك و ستحل المشكلة باذن الله

اليكم الاكواد
PHP كود :
Private DefaultControlSizes As New Dictionary(Of ControlCtrlInfo)
 
   Private FormDefaultClientSize As Size

    Public Sub 
New()
 
       InitializeComponent()
 
       Me.WindowState FormWindowState.Normal
        Me
.MinimumSize Me.Size
        FormDefaultClientSize 
Me.ClientSize

        Dim ctrl 
As Control Me.GetNextControl(MeTrue)
 
       While ctrl IsNot Nothing
            If TypeOf ctrl Is ListBox Then DirectCast
(ctrlListBox).IntegralHeight False
            DefaultControlSizes
.Add(ctrl, New CtrlInfo(ctrl.Boundsctrl.Font.Size))
 
           ctrl Me.GetNextControl(ctrlTrue)
 
       End While
 
   End Sub

    Private Sub ScaleControls
()
 
       If Me.WindowState <> FormWindowState.Minimized Then
            For Each kvp 
As KeyValuePair(Of ControlCtrlInfoIn DefaultControlSizes
                Dim ctrl 
As Control kvp.Key

                Dim Xscl 
As Double Me.ClientSize.Width FormDefaultClientSize.Width
                Dim Yscl 
As Double Me.ClientSize.Height FormDefaultClientSize.Height

                
'comment out these 2 lines if you dont want the fonts to be scaled'

 
               Dim fntscl As Single CSng(kvp.Value.cFontSize Yscl)
 
               ctrl.Font = New Font(ctrl.Font.FontFamilyfntsclctrl.Font.Stylectrl.Font.Unit)

 
               ctrl.Width CInt(kvp.Value.cBounds.Width Xscl)
 
               ctrl.Height CInt(kvp.Value.cBounds.Height Yscl)
 
               ctrl.Left CInt(kvp.Value.cBounds.Xscl)
 
               ctrl.Top CInt(kvp.Value.cBounds.Yscl)
 
           Next
        End 
If
 
   End Sub

    Private Sub Form1_Resize
(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Resize
        ScaleControls
()
 
   End Sub
End 
Class

Public Class 
CtrlInfo
    Public cBounds 
As Rectangle
    Public cFontSize 
As Single
    Public Sub 
New(ByVal Bnds As RectangleByVal FntSize As Single)
 
       cBounds Bnds
        cFontSize 
FntSize
    End Sub 
الرد }}}
تم الشكر بواسطة: asmarsou , Amir_Alzubidy , محمد بن عطية , asemshahen5
#2
الافضل لعدم التكرار في جميع الفورم عبر كلاس في vb.net
وجلبه من الفورم
انشاء كلاس 
PHP كود :
Public Class ControlScaler
    Private DefaultControlSizes 
As New Dictionary(Of ControlCtrlInfo)
 
   Private FormDefaultClientSize As Size

    Public Sub 
New(form As Form)
 
       form.WindowState FormWindowState.Normal
        form
.MinimumSize form.Size
        FormDefaultClientSize 
form.ClientSize

        
' تحديد الحجم الأصلي لكل عنصر تحكم وحفظه في القاموس
        Dim ctrl As Control = form.GetNextControl(form, True)
        While ctrl IsNot Nothing
            If TypeOf ctrl Is ListBox Then
                DirectCast(ctrl, ListBox).IntegralHeight = False ' 
عدم تكبير الـ ListBox تلقائيًا
            End 
If
 
           DefaultControlSizes.Add(ctrl, New CtrlInfo(ctrl.Boundsctrl.Font.Size))
 
           ctrl form.GetNextControl(ctrlTrue)
 
       End While

 
       ' ربط الحدث Resize للنموذج
        AddHandler form.Resize, Sub(sender, e) ScaleControls(form)
    End Sub

    Private Sub ScaleControls(form As Form)
        If form.WindowState <> FormWindowState.Minimized Then
            ' 
حساب عامل التحجيم للعرض والارتفاع
            Dim Xscl 
As Double form.ClientSize.Width FormDefaultClientSize.Width
            Dim Yscl 
As Double form.ClientSize.Height FormDefaultClientSize.Height

            
' تحجيم حجم الخطوط
            For Each kvp As KeyValuePair(Of Control, CtrlInfo) In DefaultControlSizes
                Dim ctrl As Control = kvp.Key
                Dim fntscl As Single = CSng(kvp.Value.cFontSize * Yscl)
                ctrl.Font = New Font(ctrl.Font.FontFamily, fntscl, ctrl.Font.Style, ctrl.Font.Unit)

                ' 
تحجيم الأبعاد
                ctrl
.Width CInt(kvp.Value.cBounds.Width Xscl)
 
               ctrl.Height CInt(kvp.Value.cBounds.Height Yscl)
 
               ctrl.Left CInt(kvp.Value.cBounds.Xscl)
 
               ctrl.Top CInt(kvp.Value.cBounds.Yscl)
 
           Next
        End 
If
 
   End Sub
End 
Class

Public Class 
CtrlInfo
    Public cBounds 
As Rectangle
    Public cFontSize 
As Single

    Public Sub 
New(Bnds As RectangleFntSize As Single)
 
       cBounds Bnds
        cFontSize 
FntSize
    End Sub
End 
Class 
 
استخدام الكلاس في الفورم 

PHP كود :
Public Partial Class Form1
    Inherits Form

    Private controlScaler 
As ControlScaler

    Public Sub 
New()
 
       InitializeComponent()
 
       controlScaler = New ControlScaler(Me' إنشاء كائن من كلاس ControlScaler وتمرير الفورم إليه
    End Sub
End Class 

اما في سي شارب
انشاء كلاس 
PHP كود :
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

public class 
ControlScaler
{
 
   private Dictionary<ControlCtrlInfoDefaultControlSizes = new Dictionary<ControlCtrlInfo>();
 
   private Size FormDefaultClientSize;

 
   public ControlScaler(Form form)
 
   {
 
       form.WindowState FormWindowState.Normal;
 
       form.MinimumSize form.Size;
 
       FormDefaultClientSize form.ClientSize;

 
       // تحديد الحجم الأصلي لكل عنصر تحكم وحفظه في القاموس
 
       Control ctrl form.GetNextControl(formtrue);
 
       while (ctrl != null)
 
       {
 
           if (ctrl is ListBox)
 
           {
 
               ((ListBox)ctrl).IntegralHeight false// عدم تكبير الـ ListBox تلقائيًا
 
           }
 
           DefaultControlSizes.Add(ctrl, new CtrlInfo(ctrl.Boundsctrl.Font.Size));
 
           ctrl form.GetNextControl(ctrltrue);
 
       }

 
       // ربط الحدث Resize للنموذج
 
       form.Resize += (sendere) => ScaleControls(form);
 
   }

 
   private void ScaleControls(Form form)
 
   {
 
       if (form.WindowState != FormWindowState.Minimized)
 
       {
 
           // حساب عامل التحجيم للعرض والارتفاع
 
           double Xscl = (double)form.ClientSize.Width FormDefaultClientSize.Width;
 
           double Yscl = (double)form.ClientSize.Height FormDefaultClientSize.Height;

 
           // تحجيم حجم الخطوط
 
           foreach (KeyValuePair<ControlCtrlInfokvp in DefaultControlSizes)
 
           {
 
               Control ctrl kvp.Key;
 
               float fntscl = (float)(kvp.Value.cFontSize Yscl);
 
               ctrl.Font = new Font(ctrl.Font.FontFamilyfntsclctrl.Font.Stylectrl.Font.Unit);

 
               // تحجيم الأبعاد
 
               ctrl.Width = (int)(kvp.Value.cBounds.Width Xscl);
 
               ctrl.Height = (int)(kvp.Value.cBounds.Height Yscl);
 
               ctrl.Left = (int)(kvp.Value.cBounds.Xscl);
 
               ctrl.Top = (int)(kvp.Value.cBounds.Yscl);
 
           }
 
       }
 
   }
}

public class 
CtrlInfo
{
 
   public Rectangle cBounds;
 
   public float cFontSize;

 
   public CtrlInfo(Rectangle Bndsfloat FntSize)
 
   {
 
       cBounds Bnds;
 
       cFontSize FntSize;
 
   }


استدعائه في الفورم
PHP كود :
using System;
using System.Windows.Forms;

public 
partial class Form1 Form
{
 
   private ControlScaler controlScaler;

 
   public Form1()
 
   {
 
       InitializeComponent();
 
       controlScaler = new ControlScaler(this); // إنشاء كائن من كلاس ControlScaler وتمرير الفورم إليه
 
   }

الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , asemshahen5
#3
شكرا جزيلا وفقك الله لكل خير
ممكن شرح مفصل عن استخدام الكلاس
فيديو او صور
الرد }}}
تم الشكر بواسطة:
#4
كيفية استخدام الكلاس
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مساعدة في شاشة الدخول سيد أحمد 1 323 23-03-25, 01:47 AM
آخر رد: مصمم هاوي
Heart شاشة تسجيل الدخول والصلاحيات alshandodi 1 3,250 13-01-23, 12:18 AM
آخر رد: alnagi
  [كورس] معرفة عدد مستخدمين برنامجك dasktop 2 1,534 14-05-22, 02:47 AM
آخر رد: dasktop
  [VB.NET] الطريقة الصحيحة لجعل برنامجك متعدد اللغات سعود الشامان 5 6,395 04-02-21, 11:22 PM
آخر رد: ibra9009
  [مشروع] اجعل برنامجك يحذف نفسه عند او عدم تحقق شرط سعود 0 2,004 07-12-20, 03:33 AM
آخر رد: سعود
  [درس فيديو] التحكم الكامل في إدارة المستخدمين وإنشاء صلاحياتهم في برنامجك من خلال SQL SERVER 2016 عبدالله الدوسري 10 50,931 13-10-20, 04:48 PM
آخر رد: tanmia
Video [درس فيديو] طريقة تشغيل برنامجك عند تشغيل جهاز الكمبيوتر ahmadpal 0 1,698 06-06-20, 03:41 AM
آخر رد: ahmadpal
Wink [مشروع] تحويل الصور الى حروف وارقام في حال كانت الصورة تحوي على كلمات ahmadpal 0 2,226 13-05-20, 02:23 AM
آخر رد: ahmadpal
  خطوة خطوة - ازاي تحول برنامجك لملف exe يتم تسطيبه على اي كمبيوتر بجميع ملفاته ggtt17121985 3 3,205 11-02-20, 12:02 AM
آخر رد: ggtt17121985
  [VB.NET] مشروع شاشة تسجيل دخول بقاعدة بيانات اكسس ammar2018 2 6,751 15-08-19, 08:27 PM
آخر رد: basheer

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم