Откройте новую форму ниже из текстового поля

#c#

#c# #.net #winforms

Вопрос:

Мне нужно открыть форму точно ниже из Textbox . Моя проблема в том, что я включаю некоторые невидимые панели. Когда появляется панель, Visible и Textbox она меняется Location , я получаю неправильную новую стартовую позицию WinForm.

Вот что я пытаюсь сделать.

  foreach (Control ctrl in myPanel.Controls)
        {
            if (ctrl is TextBox)
            {
                tb = (TextBox)ctrl;

                tb.DoubleClick  = Tb_DoubleClick;
            }
          
        }

 private void Tb_DoubleClick(object sender, EventArgs e)
    {
        TextBox ts = sender as TextBox;
        if (ts.BackColor == Color.White)
        {
            int x = ts.Location.X;
            int y = ts.Location.Y;
            VirtualNumPad2 frm = new VirtualNumPad2();
            frm.Location = new Point(x, y 200 );               
            frm.ShowDialog();

           
        }
      

    }
  

введите описание изображения здесь

Комментарии:

1. foreach (var tb in myPanel.Controls.OfType<TextBox>()) tb.DoubleClick = Tb_DoubleClick; (немного более простой способ написать этот цикл)

2. Какую начальную позицию вы хотите, если панель не видна?

3. Я загрузил картинку, чтобы лучше понять, что я пытаюсь сделать.

4. Когда панель станет видимой, обработайте это событие и пересчитайте местоположение.

5. Я согласен с @CodingYoshi. Вам нужно пересчитать местоположение на основе видимости. Я делал нечто подобное в прошлом. если (глобальные параметры. IsSupportPanel1) { lciPanel1.Visibility = Видимость макета. Всегда; esiLeft.Width = (lycgMain. Ширина — lycgMain.Padding. Слева — lycgMain.Padding. Справа — 96 * 8) / 2; } else { lciPanel1.Visibility =Видимость макета. Никогда; esiLeft.Width = (lycgMain. Ширина — lycgMain.Padding. Слева — lycgMain.Padding. Справа — 96 * 7) / 2; }