Раздвижные панели - одни работают, другие нет - PullRequest
0 голосов
/ 24 сентября 2018

Я наткнулся на кусочек стены и не знаю, как мне это удалось.Я пытаюсь иметь несколько панелей в моем приложении на C #, и каждая из них скользит в меню по бокам.Я написал отдельный класс слайдов:

class Slide
{
    Panel pane;
    Button btn;
    bool hidden;
    Timer t;
    const int maxWidth = 315;

    public Slide(Panel p, Button b)
    {
        this.pane = p;
        this.btn = b;
        hidden = true;

        btn.Click += new EventHandler(btnClick);

        t = new Timer();
        t.Interval = 15;
        t.Tick += new EventHandler(timeTick);
    }

    private void timeTick(object sender, EventArgs e)
    {
        if(hidden)
        {
            SlidingPane(+10);
        }
        else
        {
            SlidingPane(-10);
        }
    }

    private void btnClick(object sender, EventArgs e)
    {
        t.Start();
    }

    private void SlidingPane(int i)
    {
        pane.Width += i;

        if(pane.Width >= maxWidth || pane.Width <= 0)
        {
            t.Stop();
            hidden = !hidden;
        }
    }
}

И я инициализировал панели следующим образом:

    Slide menuP, calendarP, peopleP, taskP, settingsP;
    public Form1()
    {
        InitializeComponent();
        ButtonColours();
        InitialisePanes();
    }

    private void InitialisePanes()
    {
        menuP = new Slide(menuPane, menuButton);
        calendarP = new Slide(calendarPane, calendarButton);
        peopleP = new Slide(peoplePane, peopleButton);
        taskP = new Slide(taskPane, toDoButton);
        settingsP = new Slide(settingsPane, settingsButton);
    }

А вот код конструктора форм для рабочей панели:

this.menuPane.BackColor = System.Drawing.Color.SlateGray;
this.menuPane.Controls.Add(this.peoplePane);
this.menuPane.Dock = System.Windows.Forms.DockStyle.Left;
this.menuPane.Location = new System.Drawing.Point(67, 0);
this.menuPane.Name = "menuPane";
this.menuPane.Size = new System.Drawing.Size(0, 652);
this.menuPane.TabIndex = 2;

А остальные точно такие же.Например:

this.peoplePane.BackColor = System.Drawing.Color.SlateGray;
this.peoplePane.Controls.Add(this.calendarPane);
this.peoplePane.Dock = System.Windows.Forms.DockStyle.Left;
this.peoplePane.Location = new System.Drawing.Point(67, 0);
this.peoplePane.Name = "peoplePane";
this.peoplePane.Size = new System.Drawing.Size(0, 652);
this.peoplePane.TabIndex = 2;

Я запустил свое приложение и нажимаю на кнопку меню, оно работает.Скользит и выходит красиво.Я нажимаю на остальных и .... ничего не происходит.

Кто-нибудь может понять, почему это происходит?Все, на что я смотрю, говорит мне, что оно должно работать.

1 Ответ

0 голосов
/ 24 сентября 2018

Чтобы убедиться, что все панели правильно выровнены друг с другом и (не) вложены вы можете использовать код, подобный следующему:

foreach( Control ctl in new[]  { peoplePane, calendarPane, taskPane, settingsPane })
{
    ctl.Parent = menuPane.Parent;
    ctl.Location = menuPane.Location;
}

Предполагается, чтоmenuPane находится в нужном месте и заставляет всех остальных сидеть прямо сверху, не вкладывая их.

Код, который вы разместили, содержал неправильные вложения и перемещал панели в одно место с помощью мыши , также создать (в этом случае нежелательное) вложение.Перемещение с клавиатурой позволяет избежать этого, но это утомительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...