#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; }