Как установить размер объекта на форме в C #? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть панель и Datagridview на форме, панель предназначена для перемещения вверх и вниз, чтобы показать и скрыть ее содержимое.

enter image description here

Когда я нажимаю наПоказать кнопку, он выполняет этот код:

private void button1_Click(object sender, EventArgs e)
{
    if (hidded)
    {
        button1.Visible = false;
        button2.Visible = true;
    }
    else
    {
        button1.Visible = true;
        button2.Visible = false;
    }
    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{

    if (hidded)
    {                
        Spanel.Height = Spanel.Height + 20;
        Datagridview1.Location = new Point(23 , Datagridview1.Location.Y + 20);
        if (Spanel.Height >= 140)
        {
            timer1.Stop();
            hidded = false;
            this.Refresh();
        }
   }
   else
   {
       Spanel.Height = Spanel.Height - 20;
       Datagridview1.Location = new Point( 23, Datagridview1.Location.Y - 20);

       if (Spanel.Height <= 0)
       {
           timer1.Stop();
           hidded = true;
           this.Refresh();
       }
   }

}

, когда я пытаюсь скрыть / закрыть панель, Datagridview движется вверх и становится так:

enter image description here

Мне просто нужно зафиксировать размер привязки или расположение сетки данных снизу.

1 Ответ

0 голосов
/ 29 мая 2018

Если вы хотите сделать это по-своему (с таймером), просто измените свой обработчик события отметки таймера на код ниже.Это также изменит размер DataGridView вместе с его положением.

private void timer1_Tick(object sender, EventArgs e)
{
    if (hidded)
    {
        Spanel.Height = Spanel.Height + 20;
        Datagridview1.Location = new Point(23, Datagridview1.Location.Y + 20);
        Datagridview1.Size = new Size(Datagridview1.Width, Datagridview1.Height - 20);
        if (Spanel.Height >= 140)
        {
            timer1.Stop();
            hidded = false;
            this.Refresh();
        }
    }
    else
    {
        Spanel.Height = Spanel.Height - 20;
        Datagridview1.Location = new Point(23, Datagridview1.Location.Y - 20);
        Datagridview1.Size = new Size(Datagridview1.Width, Datagridview1.Height + 20);
        if (Spanel.Height <= 0)
        {
            timer1.Stop();
            hidded = true;
            this.Refresh();
        }
    }
}

Мой подход к этой проблеме будет несколько другим, и если вы не возражаете, я позволю это здесь.Вместо того, чтобы ставить якорь, я делал бы это так (см. Рисунок ниже), используя стыковку.Он должен работать так же, используя код, который вы разместили (ваш SPanel - Panel2 на картинке).Your form layout Редактировать # 1: Для плавного перемещения или изменения размера элементов управления в вашем приложении WinForm я рекомендую использовать эту библиотеку: https://github.com/UweKeim/dot-net-transitions. При использовании упомянутой библиотеки ваш обработчик событий нажатия кнопки будет выглядеть примерно такэто:

private bool resizing = false;
private void button1_Click(object sender, EventArgs e)
{
    if (resizing) 
        return;

    resizing = true;
    Transition t = new Transition(new TransitionType_Acceleration(600));
    t.TransitionCompletedEvent += (snd, ea) => { resizing = false; };
    t.add(panel2, "Height", panel2.Height == 0 ? 250 : 0);
    t.run();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...