דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך ליצור childform יותר יפה כאשר משתמשים בmdi

איך ליצור childform יותר יפה כאשר משתמשים בmdi

מתוזמן נעוץ נעול הועבר תכנות
10 פוסטים 2 כותבים 328 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • pcinfogmachP מנותק
    pcinfogmachP מנותק
    pcinfogmach
    כתב ב נערך לאחרונה על ידי
    #1

    אני רוצה להשתמש בmdichild
    או לחילופין פשוט להדגיר ככה

    var childForm = new ChildForm();
    //childForm.TopLevel = false;
    

    (ואז אין את החסרוננות של mdi ואיכמ"ל)

    בכל אופן הרעיון הוא להכניס כמה forms בתוך form אחד
    דומה למה שיש בבר אילן.
    הבעיה היא שכשעושים ככה אז הforms הפנימיים נהיים מגעילים ומיושנים.
    השאלה היא אם יש דרך לעשות אותם יותר יפים?
    מצו:ב תמונה
    9ee94e11-9488-41f8-a1ef-0ab25619dae8-image.png

    גמ"ח מידע מחשבים ואופיס

    תגובה 1 תגובה אחרונה
    0
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #2

      mdi זה פתרון מיושן מאוד.
      אתה אמור לחפש מערכת חלונות כמו Visual Studio וכדומה, אני לא מוצא כזה טוב בWinForms (גם בWPF אין מובנה, אבל שמה הכל קל יותר).
      אגב לכמה חברות גדולות יש חבילות פקדים בתשלום (יקר) שחוסכים המון הן בעיצוב והן בהתנהגות.

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      pcinfogmachP תגובה 1 תגובה אחרונה
      1
      • pcinfogmachP מנותק
        pcinfogmachP מנותק
        pcinfogmach
        השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
        #3

        מסתבר שאפשר להשתמש עם usercontrol
        הנה משהו בתור התחלה אזמח אם מישהו יוכל לעבור על זה ואולי גם לעזור לי לשפר את זה - נתקעתי עם הרחבה בצד שמאל ולמעלה - ועם כפתור minimize

        using System;
        using System.Drawing;
        using System.Windows.Forms;
        
        namespace TestC
        {
            public partial class Form1 : Form
            {
                private ResizeableControl resizeableControl;
        
                public Form1()
                {
                    InitializeComponent();
                    InitializeResizeableControl();
                }
        
                private void InitializeResizeableControl()
                {
                    resizeableControl = new ResizeableControl();
                    Controls.Add(resizeableControl);
        
                    // Handle the Resize event of the form to update the size of the control
                    Resize += (sender, e) => resizeableControl.Size = ClientSize;
                }
            }
        
            public class ResizeableControl : UserControl
            {
                private const int BorderSize = 8;
                private bool isResizing = false;
                private bool isResizingHorizontal = false;
                private bool isResizingVertical = false;
                private Point lastMousePosition;
        
                bool isMouseDown = false;
                private Point mouseDownLocation;
        
                public ResizeableControl()
                {
                    // Set the initial size
                    Size = new Size(200, 200);
                    BorderStyle = BorderStyle.FixedSingle;
                    // Handle mouse events
                    MouseDown += OnMouseDown;
                    MouseMove += OnMouseMove;
                    MouseUp += OnMouseUp;
                    InitializeComponents();
                }
        
                private void InitializeComponents()
                {
                    Panel titleBar = new Panel();
                    titleBar.Dock = DockStyle.Top;
                    titleBar.BackColor = Color.White;
        
                    titleBar.Height = 20;
                    Controls.Add(titleBar);
                    titleBar.MouseDown += TitleBar_MouseDown;
                    titleBar.MouseMove += TitleBar_MouseMove;
                    titleBar.MouseUp += TitleBar_MouseUp;
        
                    // Maximize button
                    Button maximizeButton = new Button();
                    maximizeButton.Text = "⬜"; // Larger square Unicode character
                    maximizeButton.Width = 20;
                    maximizeButton.Height = 20;
                    maximizeButton.Dock = DockStyle.Right;
                    maximizeButton.FlatStyle = FlatStyle.Flat;
                    maximizeButton.FlatAppearance.BorderSize = 0;
        
                    // Store the original DockStyle
                    DockStyle originalDockStyle = DockStyle.None;
        
                    maximizeButton.Click += (sender, e) =>
                    {
                        if (this.Dock == DockStyle.None)
                        {
                            // Maximize the form
                            originalDockStyle = this.Dock;
                            this.Dock = DockStyle.Fill;
                            maximizeButton.Text = "❐"; // Change text to indicate restore
                        }
                        else
                        {
                            // Restore the original DockStyle
                            this.Dock = originalDockStyle;
                            maximizeButton.Text = "□"; // Change text to indicate maximize
                        }
                    };
        
                    titleBar.Controls.Add(maximizeButton);
        
        
                    // X button
                    Button xButton = new Button();
                    xButton.Text = "X";
                    xButton.Dock = DockStyle.Right;
                    xButton.Width = 20;
                    xButton.Height = 20;
                    xButton.FlatStyle = FlatStyle.Flat;
                    xButton.FlatAppearance.BorderSize = 0;
                    xButton.Click += (sender, e) => this.Dispose();
                    titleBar.Controls.Add(xButton);
                }
        
        
                private void TitleBar_MouseUp(object sender, MouseEventArgs e)
                {
                    isMouseDown = false;
                }
        
                private void TitleBar_MouseMove(object sender, MouseEventArgs e)
                {
                    if (isMouseDown)
                    {
                        if (isMouseDown)
                        {
                            // Calculate the new position of the form based on the mouse movement
                            this.Location = new Point(
                                (this.Location.X - mouseDownLocation.X) + e.X,
                                (this.Location.Y - mouseDownLocation.Y) + e.Y);
        
                            this.Update(); // Forces the form to repaint for a smoother visual experience
                        }
                    }
                }
        
                private void TitleBar_MouseDown(object sender, MouseEventArgs e)
                {
                    isMouseDown = true;
                    mouseDownLocation = e.Location;
                }
        
                private void OnMouseDown(object sender, MouseEventArgs e)
                {
                    if (e.Button == MouseButtons.Left && IsOnBorder(e.Location))
                    {
                        isResizing = true;
                        lastMousePosition = e.Location;
        
                        isResizingHorizontal = e.X <= BorderSize || e.X >= Width - BorderSize;
                        isResizingVertical = e.Y <= BorderSize || e.Y >= Height - BorderSize;
                    }
                }
        
                private void OnMouseMove(object sender, MouseEventArgs e)
                {
                    if (isResizing)
                    {
                        int deltaX = e.X - lastMousePosition.X;
                        int deltaY = e.Y - lastMousePosition.Y;
        
                        if (isResizingHorizontal && isResizingVertical)
                        {
                            // Diagonal resizing
                            Width += deltaX;
                            Height += deltaY;
                        }
                        else if (isResizingHorizontal)
                        {
                            // Horizontal resizing
                            Width += deltaX;
                        }
                        else if (isResizingVertical)
                        {
                            // Vertical resizing
                            Height += deltaY;
                        }
        
                        lastMousePosition = e.Location;
                    }
                    else
                    {
                        if (IsOnCorner(e.Location))
                        {
                            Cursor = Cursors.SizeNWSE;
                        }
                        else if (e.X >= Width - BorderSize && e.Y >= Height - BorderSize)
                        {
                            // Cursor is in the bottom-right corner, allowing diagonal resizing
                            Cursor = Cursors.SizeNWSE;
                        }
                        else if (e.X >= Width - BorderSize)
                        {
                            // Cursor is on the right border, allowing horizontal resizing
                            Cursor = Cursors.SizeWE;
                        }
                        else if (e.Y >= Height - BorderSize)
                        {
                            // Cursor is on the bottom border, allowing vertical resizing
                            Cursor = Cursors.SizeNS;
                        }
                        else
                        {
                            Cursor = Cursors.Default;
                        }
                    }
                }
        
        
                private void OnMouseUp(object sender, MouseEventArgs e)
                {
                    if (e.Button == MouseButtons.Left)
                    {
                        isResizing = false;
                        Cursor = Cursors.Default;
                    }
                }
        
                private bool IsOnBorder(Point mouseLocation)
                {
                    return mouseLocation.X <= BorderSize || mouseLocation.Y <= BorderSize ||
                           mouseLocation.X >= Width - BorderSize || mouseLocation.Y >= Height - BorderSize;
                }
        
                private bool IsOnCorner(Point mouseLocation)
                {
                    return mouseLocation.X <= BorderSize && mouseLocation.Y <= BorderSize ||
                           mouseLocation.X >= Width - BorderSize && mouseLocation.Y >= Height - BorderSize;
                }
            }
        }
        

        גמ"ח מידע מחשבים ואופיס

        תגובה 1 תגובה אחרונה
        0
        • dovidD מחובר
          dovidD מחובר
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #4

          המאמצים האלה לא שווים בעיני, כל ניסיון למודרניזציה בWinForms צריך להתחיל מניסיון הגירה למקום אחר.

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          0
          • pcinfogmachP מנותק
            pcinfogmachP מנותק
            pcinfogmach
            כתב ב נערך לאחרונה על ידי pcinfogmach
            #5

            הבעיה שנסיון לעשות כזה דבר בwpf עלה לי ממש בתוהו פה לפחות הגעתי לאן שהוא
            עריכה:
            עכשיו ראיתי את זה בwpf צריך לשבת לראות מה יצא
            http://csharphelper.com/howtos/howto_wpf_resize_rectangle.html

            גמ"ח מידע מחשבים ואופיס

            pcinfogmachP תגובה 1 תגובה אחרונה
            0
            • dovidD מחובר
              dovidD מחובר
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #6

              מעניין, מWPF בחרת להתייאש עוד לפני ששאלת כל שאלה, ואילו על מה שאתה כן שואל אז אני מיואש 🙂 ...
              בWPF אמורים להיות פקדים מוכנים
              תבדוק את זה:
              https://github.com/Dirkster99/AvalonDock

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              pcinfogmachP תגובה 1 תגובה אחרונה
              1
              • pcinfogmachP מנותק
                pcinfogmachP מנותק
                pcinfogmach
                השיב לpcinfogmach ב נערך לאחרונה על ידי pcinfogmach
                #7

                לבינתיים השלמתי את המלאכה בwinform אולי יהיה שימושי למישהו

                c9c8cd46-4e3f-40d4-a126-47b877024225-image.png

                using System;
                using System.Collections.Generic;
                using System.Drawing;
                using System.Linq;
                using System.Text;
                using System.Threading.Tasks;
                using System.Windows.Forms;
                
                namespace ResizableTextBox
                {
                    class SizeableUserControl : UserControl
                    {
                        private const int grab = 16;
                
                        public SizeableUserControl()
                        {
                            this.ResizeRedraw = true;
                            InitializeComponent();
                        }
                
                        protected override void WndProc(ref Message m)
                        {
                            base.WndProc(ref m);
                            const int WM_NCHITTEST = 0x84;
                            const int HT_LEFT = 10;
                            const int HT_RIGHT = 11;
                            const int HT_TOP = 12;
                            const int HT_TOPLEFT = 13;
                            const int HT_TOPRIGHT = 14;
                            const int HT_BOTTOM = 15;
                            const int HT_BOTTOMLEFT = 16;
                            const int HT_BOTTOMRIGHT = 17;
                
                            if (m.Msg == WM_NCHITTEST)
                            {
                                var pos = this.PointToClient(new Point(m.LParam.ToInt32()));
                
                                if (pos.X <= grab && pos.Y <= grab)
                                    m.Result = new IntPtr(HT_TOPLEFT);
                                else if (pos.X >= this.ClientSize.Width - grab && pos.Y <= grab)
                                    m.Result = new IntPtr(HT_TOPRIGHT);
                                else if (pos.X <= grab && pos.Y >= this.ClientSize.Height - grab)
                                    m.Result = new IntPtr(HT_BOTTOMLEFT);
                                else if (pos.X >= this.ClientSize.Width - grab && pos.Y >= this.ClientSize.Height - grab)
                                    m.Result = new IntPtr(HT_BOTTOMRIGHT);
                                else if (pos.X <= grab)
                                    m.Result = new IntPtr(HT_LEFT);
                                else if (pos.X >= this.ClientSize.Width - grab)
                                    m.Result = new IntPtr(HT_RIGHT);
                                else if (pos.Y <= grab)
                                    m.Result = new IntPtr(HT_TOP);
                                else if (pos.Y >= this.ClientSize.Height - grab)
                                    m.Result = new IntPtr(HT_BOTTOM);
                            }
                        }
                
                        private void InitializeComponent()
                        {
                            this.SuspendLayout();
                            this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                            this.Name = "SizeableUserControl";
                            this.Size = new System.Drawing.Size(100, 100);
                            
                            Panel titleBar = new Panel();
                            titleBar.Dock = DockStyle.Top;
                            titleBar.BackColor = Color.White;
                
                            titleBar.Height = 20;
                            Controls.Add(titleBar);
                            titleBar.MouseDown += TitleBar_MouseDown;
                            titleBar.MouseMove += TitleBar_MouseMove;
                            titleBar.MouseUp += TitleBar_MouseUp;
                
                            // Minimize button
                            Button minimizeButton = new Button();
                            minimizeButton.Text = "─";
                            minimizeButton.TextAlign = ContentAlignment.MiddleCenter;
                            minimizeButton.Width = 20;
                            minimizeButton.Height = 20;
                            minimizeButton.Dock = DockStyle.Right;
                            minimizeButton.FlatStyle = FlatStyle.Flat;
                            minimizeButton.FlatAppearance.BorderSize = 0;
                            titleBar.Controls.Add(minimizeButton);
                
                            minimizeButton.Click += (sender, e) =>
                            {
                                if (minimizeButton.Text == "─")
                                { 
                                minimizeButton.Text = "+";
                                this.Height = 20;
                                this.Width = 60;
                                }
                                else
                                {
                                    minimizeButton.Text = "─";
                                    this.Height = 100;
                                    this.Width = 100;
                                }
                            };
                
                            // Maximize button
                            Button maximizeButton = new Button();
                            maximizeButton.Text = "⬜"; // Larger square Unicode character
                            maximizeButton.TextAlign = ContentAlignment.MiddleCenter;
                            maximizeButton.Width = 20;
                            maximizeButton.Height = 20;
                            maximizeButton.Dock = DockStyle.Right;
                            maximizeButton.FlatStyle = FlatStyle.Flat;
                            maximizeButton.FlatAppearance.BorderSize = 0;
                
                            // Store the original DockStyle
                            DockStyle originalDockStyle = DockStyle.None;
                
                            maximizeButton.Click += (sender, e) =>
                            {
                                if (this.Dock == DockStyle.None)
                                {
                                    // Maximize the form
                                    originalDockStyle = this.Dock;
                                    this.Dock = DockStyle.Fill;
                                    maximizeButton.Text = "❐"; // Change text to indicate restore
                                }
                                else
                                {
                                    // Restore the original DockStyle
                                    this.Dock = originalDockStyle;
                                    maximizeButton.Text = "⬜"; // Change text to indicate maximize
                                }
                            };
                
                            titleBar.Controls.Add(maximizeButton);
                
                
                            // X button
                            Button xButton = new Button();
                            xButton.Text = "X";
                            xButton.Dock = DockStyle.Right;
                            xButton.Width = 20;
                            xButton.Height = 20;
                            xButton.FlatStyle = FlatStyle.Flat;
                            xButton.FlatAppearance.BorderSize = 0;
                            xButton.Click += (sender, e) => this.Dispose();
                            titleBar.Controls.Add(xButton);
                
                            this.ResumeLayout(false);
                        }
                
                        bool isMouseDown = false;
                        private Point mouseDownLocation;
                
                        private void TitleBar_MouseUp(object sender, MouseEventArgs e)
                        {
                            isMouseDown = false;
                        }
                
                        private void TitleBar_MouseMove(object sender, MouseEventArgs e)
                        {
                            if (isMouseDown)
                            {
                                if (isMouseDown)
                                {
                                    // Calculate the new position of the form based on the mouse movement
                                    this.Location = new Point(
                                        (this.Location.X - mouseDownLocation.X) + e.X,
                                        (this.Location.Y - mouseDownLocation.Y) + e.Y);
                
                                    this.Update(); // Forces the form to repaint for a smoother visual experience
                                }
                            }
                        }
                
                        private void TitleBar_MouseDown(object sender, MouseEventArgs e)
                        {
                            isMouseDown = true;
                            mouseDownLocation = e.Location;
                        }
                    }
                }
                
                

                גמ"ח מידע מחשבים ואופיס

                pcinfogmachP תגובה 1 תגובה אחרונה
                0
                • dovidD מחובר
                  dovidD מחובר
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #8

                  יהיה שימושי להבאים אחריך שינסו עוד את מזלם בWinForms.
                  אתה עצמך לא תשתמש עם זה לדעתי לאורך זמן.

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  0
                  • pcinfogmachP מנותק
                    pcinfogmachP מנותק
                    pcinfogmach
                    השיב לpcinfogmach ב נערך לאחרונה על ידי pcinfogmach
                    #9

                    שיחקתי עם זה קצת והוספתי לו תכונות snap פשוטות (לקצוות של הparentform ולקצוות של אחד לשני)

                    static class MyDictionary
                    {
                        public static List<SizeableUserControl> userControlCollection = new List<SizeableUserControl>();
                    }
                    
                    class SizeableUserControl : UserControl
                    {
                        Form parentForm;
                        private const int grab = 16;
                        public SizeableUserControl(Form form)
                        {
                            parentForm = form;
                            MyDictionary.userControlCollection.Add(this);
                            this.ResizeRedraw = true;
                            InitializeComponent();
                        }
                    
                        private void InitializeComponent()
                        {
                            this.SuspendLayout();
                            this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                            this.Name = "SizeableUserControl";
                            this.Size = new System.Drawing.Size(100, 100);
                            
                            Panel titleBar = new Panel();
                            titleBar.Dock = DockStyle.Top;
                            titleBar.BackColor = Color.White;
                    
                            titleBar.Height = 20;
                            Controls.Add(titleBar);
                            titleBar.MouseDown += TitleBar_MouseDown;
                            titleBar.MouseMove += TitleBar_MouseMove;
                            titleBar.MouseUp += TitleBar_MouseUp;
                    
                            // Minimize button
                            Button minimizeButton = new Button();
                            minimizeButton.Text = "─";
                            minimizeButton.TextAlign = ContentAlignment.MiddleCenter;
                            minimizeButton.Width = 20;
                            minimizeButton.Height = 20;
                            minimizeButton.Dock = DockStyle.Right;
                            minimizeButton.FlatStyle = FlatStyle.Flat;
                            minimizeButton.FlatAppearance.BorderSize = 0;
                            titleBar.Controls.Add(minimizeButton);
                    
                            minimizeButton.Click += (sender, e) =>
                            {
                                if (minimizeButton.Text == "─")
                                { 
                                minimizeButton.Text = "+";
                                this.Height = 20;
                                this.Width = 60;
                                }
                                else
                                {
                                    minimizeButton.Text = "─";
                                    this.Height = 100;
                                    this.Width = 100;
                                }
                            };
                    
                            // Maximize button
                            Button maximizeButton = new Button();
                            maximizeButton.Text = "⬜"; // Larger square Unicode character
                            maximizeButton.TextAlign = ContentAlignment.MiddleCenter;
                            maximizeButton.Width = 20;
                            maximizeButton.Height = 20;
                            maximizeButton.Dock = DockStyle.Right;
                            maximizeButton.FlatStyle = FlatStyle.Flat;
                            maximizeButton.FlatAppearance.BorderSize = 0;
                    
                            // Store the original DockStyle
                            DockStyle originalDockStyle = DockStyle.None;
                    
                            maximizeButton.Click += (sender, e) =>
                            {
                                if (this.Dock == DockStyle.None)
                                {
                                    // Maximize the form
                                    originalDockStyle = this.Dock;
                                    this.Dock = DockStyle.Fill;
                                    maximizeButton.Text = "❐"; // Change text to indicate restore
                                }
                                else
                                {
                                    // Restore the original DockStyle
                                    this.Dock = originalDockStyle;
                                    maximizeButton.Text = "⬜"; // Change text to indicate maximize
                                }
                            };
                    
                            titleBar.Controls.Add(maximizeButton);
                    
                    
                            // X button
                            Button xButton = new Button();
                            xButton.Text = "X";
                            xButton.Dock = DockStyle.Right;
                            xButton.Width = 20;
                            xButton.Height = 20;
                            xButton.FlatStyle = FlatStyle.Flat;
                            xButton.FlatAppearance.BorderSize = 0;
                            xButton.Click += (sender, e) => this.Dispose();
                            titleBar.Controls.Add(xButton);
                    
                            this.ResumeLayout(false);
                        }
                    
                        protected override void WndProc(ref Message m)
                        {
                            base.WndProc(ref m);
                            const int WM_NCHITTEST = 0x84;
                            const int HT_LEFT = 10;
                            const int HT_RIGHT = 11;
                            const int HT_TOP = 12;
                            const int HT_TOPLEFT = 13;
                            const int HT_TOPRIGHT = 14;
                            const int HT_BOTTOM = 15;
                            const int HT_BOTTOMLEFT = 16;
                            const int HT_BOTTOMRIGHT = 17;
                    
                            if (m.Msg == WM_NCHITTEST)
                            {
                                var pos = this.PointToClient(new Point(m.LParam.ToInt32()));
                    
                                if (pos.X <= grab && pos.Y <= grab)
                                    m.Result = new IntPtr(HT_TOPLEFT);
                                else if (pos.X >= this.ClientSize.Width - grab && pos.Y <= grab)
                                    m.Result = new IntPtr(HT_TOPRIGHT);
                                else if (pos.X <= grab && pos.Y >= this.ClientSize.Height - grab)
                                    m.Result = new IntPtr(HT_BOTTOMLEFT);
                                else if (pos.X >= this.ClientSize.Width - grab && pos.Y >= this.ClientSize.Height - grab)
                                    m.Result = new IntPtr(HT_BOTTOMRIGHT);
                                else if (pos.X <= grab)
                                    m.Result = new IntPtr(HT_LEFT);
                                else if (pos.X >= this.ClientSize.Width - grab)
                                    m.Result = new IntPtr(HT_RIGHT);
                                else if (pos.Y <= grab)
                                    m.Result = new IntPtr(HT_TOP);
                                else if (pos.Y >= this.ClientSize.Height - grab)
                                    m.Result = new IntPtr(HT_BOTTOM);
                            }
                        }
                    
                    
                    
                        bool isMouseDown = false;
                        private Point mouseDownLocation;
                    
                        private void TitleBar_MouseUp(object sender, MouseEventArgs e)
                        {
                            isMouseDown = false;
                        }
                    
                        private void TitleBar_MouseMove(object sender, MouseEventArgs e)
                        {
                            if (isMouseDown)
                            {
                                // Check proximity on all sides (adjust the threshold as needed)
                                int proximityThreshold = 10;
                    
                                // Calculate the new position of the control based on the mouse movement
                                int newX = this.Left - mouseDownLocation.X + e.X;
                                int newY = this.Top - mouseDownLocation.Y + e.Y;
                    
                                // Ensure the new position is within the boundaries of the parent form
                                newX = Math.Max(0, Math.Min(newX, parentForm.ClientSize.Width - this.Width));
                                newY = Math.Max(0, Math.Min(newY, parentForm.ClientSize.Height - this.Height));
                    
                                // Iterate through other controls and check if snapping is possible
                                foreach (var kvp in MyDictionary.userControlCollection)
                                {
                                    if (kvp != this)
                                    {
                                        // Check top side
                                        if (Math.Abs(newY - kvp.Bottom) < proximityThreshold)
                                        {
                                            newY = kvp.Bottom + 1;
                    
                                            // Align right and left if they are close enough
                                            if (Math.Abs(newX - kvp.Left) < proximityThreshold)
                                            {
                                                newX = kvp.Left;
                                            }
                                            else if (Math.Abs(newX + this.Width - kvp.Right) < proximityThreshold)
                                            {
                                                newX = kvp.Right - this.Width;
                                            }
                                        }
                    
                                        // Check bottom side
                                        else if (Math.Abs(newY + this.Height - kvp.Top) < proximityThreshold)
                                        {
                                            newY = kvp.Top - this.Height - 1;
                    
                                            // Align right and left if they are close enough
                                            if (Math.Abs(newX - kvp.Left) < proximityThreshold)
                                            {
                                                newX = kvp.Left;
                                            }
                                            else if (Math.Abs(newX + this.Width - kvp.Right) < proximityThreshold)
                                            {
                                                newX = kvp.Right - this.Width;
                                            }
                                        }
                    
                                        // Check left side
                                        if (Math.Abs(newX - kvp.Right) < proximityThreshold)
                                        {
                                            newX = kvp.Right + 1;
                    
                                            // Align tops if they are close enough
                                            if (Math.Abs(newY - kvp.Top) < proximityThreshold)
                                            {
                                                newY = kvp.Top;
                                            }
                                            // Align bottoms if they are close enough
                                            else if (Math.Abs(newY + this.Height - kvp.Bottom) < proximityThreshold)
                                            {
                                                newY = kvp.Bottom - this.Height;
                                            }
                                        }
                    
                                        // Check right side
                                        else if (Math.Abs(newX + this.Width - kvp.Left) < proximityThreshold)
                                        {
                                            newX = kvp.Left - this.Width - 1;
                    
                                            // Align tops if they are close enough
                                            if (Math.Abs(newY - kvp.Top) < proximityThreshold)
                                            {
                                                newY = kvp.Top;
                                            }
                                            // Align bottoms if they are close enough
                                            else if (Math.Abs(newY + this.Height - kvp.Bottom) < proximityThreshold)
                                            {
                                                newY = kvp.Bottom - this.Height;
                                            }
                                        }
                                    }
                                }
                    
                                // Snap to parent form edges
                                if (Math.Abs(newX) < proximityThreshold)
                                {
                                    newX = 0;
                                }
                                else if (Math.Abs(newX + this.Width - parentForm.ClientSize.Width) < proximityThreshold)
                                {
                                    newX = parentForm.ClientSize.Width - this.Width;
                                }
                    
                                if (Math.Abs(newY) < proximityThreshold)
                                {
                                    newY = 0;
                                }
                                else if (Math.Abs(newY + this.Height - parentForm.ClientSize.Height) < proximityThreshold)
                                {
                                    newY = parentForm.ClientSize.Height - this.Height;
                                }
                    
                                this.Location = new Point(newX, newY);
                    
                                // Forces the control to repaint for a smoother visual experience
                                this.Invalidate();
                            }
                        }
                    
                    
                    
                        
                    
                        private void TitleBar_MouseDown(object sender, MouseEventArgs e)
                        {
                            isMouseDown = true;
                            mouseDownLocation = e.Location;
                        }
                    }
                    

                    גמ"ח מידע מחשבים ואופיס

                    תגובה 1 תגובה אחרונה
                    2
                    • pcinfogmachP מנותק
                      pcinfogmachP מנותק
                      pcinfogmach
                      השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
                      #10

                      @dovid כתב באיך ליצור childform יותר יפה כאשר משתמשים בmdi:

                      תבדוק את זה:
                      https://github.com/Dirkster99/AvalonDock

                      בדקתי
                      הוא מושלם תודה.

                      גמ"ח מידע מחשבים ואופיס

                      תגובה 1 תגובה אחרונה
                      0

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום