(01-05-14, 12:55 PM)حريف برمجة كتب : [ -> ]افضل حل هو كالتالي :
عند تشغيل البرنامج يحفظ الروزليشن للجهاز ،، ويضعه في متغير .
وتحويل الروزليشن للشاشة كما تحب ان تكون .
وعند اغلاق البرنامج يعيد الروزليشن للجهاز كما كانت .
مع احترامي
لا احب هذا الحل ابدا
انا لا اقبل من اي برنامج ان يقوم بتغيير الرسلوشن على هواه والكثير ايضا يفكرون مثلي
هذا حل ابدا مو عملي انظر للبرامج الاحترافية امثال الفوتوشوب وغيره ، هل تراها تفعل هذا الشيئ !!
في الحقيقة انا مااعرف حل لهلمشكلة لانها ماواجهتني اصلا
انا اشوف لما اصمم برنامج يكون بشكل عادي مع اي شاشة اخرى !!!
غالبا الكود الدقيق لن يغير في Screen Resolution ......عموما و للعلم فقط ......الاشياء التي تتأثر ب هذا الأمر يمكن ترتيبها كالأتي
Loaction
Size
Font
Image
لذلك يجب أن تؤخذ جميعها ف الاعتبار عند كتابة اي كود للتعامل مع Screen Resolution
يبدو انك لم تقم بعمل Docking or Anchor لل TabControl
الواضح من الصورة انك تسخدم فورم من مكتبة مختلفة عن الفورم الخاص ب مايكروسوفت......و اعتقد أن هذا هو سبب المشكلة.......و للتأكد من ذلك عليك تطبيق نفس الكود مع الفورم العادي الموجود في الفيجوال استوديو لتري هل تحدث نفس المشكلة معك أم لا
أعتقد الفكرة التالية ربما تكون مفيدة لك في ما تريده...لكن عليك أن تقوم بكتابة دوال أو روتين لكل أنواع الكونترول لديك في الفورم
لأن بعض الكونترول عبارة عن Nested Control و بالتالي عليك ان تكتب روتين يناسب كل كونترول علي حده
متهيألي من الأفضل أن تكتب مكتبة Library لعمل Scale لكل الكونترول الموجودة في الدوت نت
كود :
Public Class Form1
Private scaleFactor As New SizeF(2.35F, 2.35F)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.AutoScaleMode = Windows.Forms.AutoScaleMode.Dpi
End Sub
Protected Overrides Sub ScaleControl(factor As SizeF, specified As BoundsSpecified)
MyBase.ScaleControl(factor, specified)
scaleFactor = New SizeF(scaleFactor.Width * factor.Width, scaleFactor.Height * factor.Height)
ScaleTabControl(Me, scaleFactor)
End Sub
Private Sub ScaleTabControl(form As Form, factor As SizeF)
Dim frm As Form = form.FindForm
For Each ctrl As Control In frm.Controls
If TypeOf ctrl Is TabControl Then
ctrl.Width = CInt(Math.Round(ctrl.Width * factor.Width))
ctrl.Height = CInt(Math.Round(ctrl.Height * factor.Height))
ctrl.Location = New Point((ctrl.Location.X * factor.Width), (ctrl.Location.Y * factor.Height))
End If
Next
' The panels (tabPages) shall adjust itself automatically so the current code is not required
'For Each Panel As Panel In tabControl.TabPages
' Panel.Width = CInt(Math.Round(Panel.Width * factor.Width))
' Panel.Height = CInt(Math.Round(Panel.Height * factor.Height))
' Panel.Location = New Point((Panel.Location.X * factor.Width), (Panel.Location.Y * factor.Height))
'Next
End Sub
End Class
عليك أيضا أن تقوم بكتابة دوال لتغيير الفونت و الصور معا