Выровнять панели инструментов по левому краю

Есть ли способ выровнять панели инструментов влево (не оставляя "пробелов") по коду?введите описание изображения здесь

(скажем, при нажатии на кнопку2)введите описание изображения здесь

PS
Также эта ситуация

введите описание изображения здесь
"Выровнять по левому краю" означает:
введите описание изображения здесь

2 ответа

Решение

Обновить

Основываясь на довольно резких изменениях ваших критериев, вот код, который поможет вам в этом. Он не идеален и даже не идеален!

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        _otherStrips = new List<OtherStrips>();
    }

    private int _currentHeight = 0;
    private List<OtherStrips> _otherStrips;

    private void button1_Click(object sender, EventArgs e)
    {
        foreach (var c in panel1.Controls)
        {
            if (c is ToolStrip)
            {
                ToolStrip ts = (ToolStrip)c;
                _otherStrips.Add(new OtherStrips() { Top = ts.Top, Width = ts.Width, Name = ts.Name });
                MoveToPosition(ts);
            }
        }
    }

    private void MoveToPosition(ToolStrip toolStrip)
    {
        bool isInline;
        toolStrip.Left = GetWidth(toolStrip, out isInline); 

        if (isInline)
            toolStrip.Top = GetTop(toolStrip);
    }

    private int GetWidth(ToolStrip ts, out bool isInline)
    {
        int result = 0;
        isInline = false;
        foreach (var item in _otherStrips)
        {
            if (item.Name == ts.Name)
                continue;

            if (item.Top == ts.Top)
            {
                isInline = true;
                break;
            }
        }

        if (!isInline)
            return result;

        foreach (var item in _otherStrips)
        {
            if (item.Width == ts.Width)
                result += item.Width;
        }

        return result + 22;//hack since the width is out by about 22pixels. Not going to spend any time fixing this
    }

    private int GetTop(ToolStrip ts)
    {
        foreach (var item in _otherStrips)
        {
            if (item.Name == ts.Name)
                continue;

            if (item.Top == ts.Top)
                return item.Top;
        }

        _currentHeight += ts.Height;
        return _currentHeight;
    }
}

struct OtherStrips
{
    public int Top { get; set; }
    public int Width { get; set; }
    public string Name { get; set; }
}

Вы можете использовать это, чтобы выровнять ваш ToolStrip влево

toolStrip1.Location = new Point(0, toolStrip1.Location.Y);
Другие вопросы по тегам