Как установить минимальное / максимальное расстояние для элемента управления Splitter? - PullRequest
3 голосов
/ 21 июля 2010

Я хочу установить минимальное и максимальное расстояние для перемещения сплиттера ... как установить это ... я попытался с помощью panelMinSize не сработало ...

На самом деле в одной из панелей сплиттера у меня есть элемент управления, и сплиттер должен настраиваться на основе элемента управления.

Ответы [ 2 ]

5 голосов
/ 21 июля 2010

Если вы не используете FixedPanel, поиграйте с MinSize panel1 и panel2.

Скажите, Panel1MinSize = 20 и panel2MinSize = 50

3 голосов
/ 21 июля 2010

Вы можете установить SplitContainer SplitterDistance на ширину элемента управления (при условии, что у вас вертикальный контейнер с разделением, используйте высоту, если у вас есть горизонтальный контейнер с разделением) в конструкторе после InitializeComponent();

Затем вы можете присоединиться к событию SplitterMoved и убедиться, что SplitterDistance больше ширины элементов управления.

Например:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace SplitterDistanceTest
{
   public partial class Form1 : Form
   {
      public Form1()
      {
         InitializeComponent();
         splitContainer1.SplitterDistance = groupBox1.Width;
         splitContainer1.SplitterMoved += new SplitterEventHandler(splitContainer1_SplitterMoved);
      }

      void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
      {
         ResizeSplitterDistance();
      }

      private const int MAXIMUM_SIZE = 200;

      private void ResizeSplitterDistance()
      {    
         if (splitContainer1.SplitterDistance < groupBox1.Width)
         {
            splitContainer1.SplitterDistance = groupBox1.Width;
         }
         if (splitContainer1.SplitterDistance > MAXIMUM_SIZE)
         {
            splitContainer1.SplitterDistance = MAXIMUM_SIZE;
         }

         // You could also do max/min percentages.  Ive shown this below
         // but commented out
         /*int minimum_percent = 30;
         int minimum_size = (int)((minimum_percent / 100m) * (decimal)splitContainer1.Width);
         int maximum_percent = 50;
         int maximum_size = (int)((maximum_percent / 100m) * (decimal)splitContainer1.Width);
         if (splitContainer1.SplitterDistance < minimum_size)
         {
            splitContainer1.SplitterDistance = minimum_size;
         }
         if (splitContainer1.SplitterDistance > maximum_size)
         {
            splitContainer1.SplitterDistance = maximum_size;
         }*/
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...