Я как-то заметил, что пока я создаю элемент управления в своем приложении, он сначала выглядит как странный прямоугольник, а затем «сжимается» до правильной формы.
Первое, что вы увидите после создания
У меня вопрос, почему я сначала вижу прямоугольник в верхнем левом углу, а затем он внезапно принимает правильную форму. Это похоже на долю секунды (мне пришлось использовать Thread.Sleep, потому что невозможно сделать снимок экрана), но мои глаза все еще видят это, и я действительно срабатываю, когда это происходит.
Это код, в котором я создаю элемент управления:
var label = new Label
{
AutoSize = true,
TextAlign = ContentAlignment.MiddleLeft,
Font = new Font("Courier New", 9F, FontStyle.Regular,
GraphicsUnit.Point, 238),
Text = keyword,
Margin = new Padding(0, 6, 25, 3),
Padding = new Padding(0, 3, 0, 0)
};
var button = new Button
{
BackgroundImage = Image.FromFile("../../../Images/cross_200x200.png"),
BackgroundImageLayout = ImageLayout.Stretch,
Dock = DockStyle.Right,
Width = 21,
Height = 21,
FlatStyle = FlatStyle.Flat,
};
button.FlatAppearance.BorderSize = 0;
var pan = new Panel
{
AutoSize = true,
Padding = new Padding(0, 0, 1, 1),
BackColor = Color.PowderBlue,
BorderStyle = BorderStyle.FixedSingle,
Tag = keyword
};
button.Click += delegate
{
_keywords.Remove(pan.Controls.OfType<Label>().First().Text);
pan.Dispose();
StatusLabel.Text = $@"Removed {keyword}";
};
pan.Controls.Add(label);
pan.Controls.Add(button);
FlowLayoutPanelMain.Controls.Add(pan);
Каждый раз, когда «ключевое слово» добавляется в элемент управления FlowLayoutPanel, сначала это прямоугольник в верхнем левом углу, а сразу после этого все в порядке.
1 ответ
С помощью моего друга мы выяснили, что это происходит из-за старой технологии Windows Forms (вероятно, этого не происходит в WPF .NET Core) и невозможности создания элементов управления во время выполнения. Итак, предлагаемое решение для этого, кажется, просто .Hide()
элемент управления, .Add()
его для FlowLayoutPanel, а затем просто .Show()
его обратно, теперь мои глаза будут довольны.
...
pan.Hide();
FlowLayoutPanelMain.Controls.Add(pan);
pan.Show();
...
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.