Я сталкиваюсь со странным явлением: у меня есть приложение WinForms с четырьмя групповыми ячейками, все четыре изначально пустые. Я использую это для отслеживания новых подписчиков / отписчиков в Твиттере, планируя расширить его использование, как только это будет работать должным образом.
Это работает правильно для новых подписчиков. Для этого у меня есть GroupBox с именем grpFollow, к которому я добавляю LinkLabels с ScreenNames моих новых подписчиков, например:
var folTop = new Point(grpFollow.Left + 5, grpFollow.Top + 5);
lblFollowers.Text = Properties.Settings.Default.FollowersNow.Count.ToString();
lblFriends.Text = Properties.Settings.Default.FriendsNow.Count.ToString();
var ctr = 1;
foreach (var fol in newFollowers)
{
var kvp = LookupUser(fol);
if (string.IsNullOrEmpty(kvp.Key)) continue;
var linklabel = new LinkLabel()
{
Text = kvp.Value,
Width = 200,
Height = 15,
Location = folTop,
Visible = true,
Name = $"follbl{ctr}"
};
ctr++;
linklabel.Links.Add(0, linklabel.Width-1, $"https://twitter.com/{kvp.Key}");
linklabel.Click += Linklabel_Click;
grpFollow.Controls.Add(linklabel);
folTop.Y += 25;
}
LookupUser - это просто функция, которая передает идентификатор пользователя в API Twitter и возвращает имя и имя экрана этого пользователя. Работает нормально, без проблем. LinkLabels добавлен красиво, никаких проблем там тоже нет.
Проблема в других групповых полях, например один для новых друзей:
folTop = new Point(grpFriends.Left + 15, grpFriends.Top + 15);
ctr = 1;
foreach (var fol in newFriends)
{
var kvp = LookupUser(fol);
if (string.IsNullOrEmpty(kvp.Key)) continue;
var llabel = new LinkLabel()
{
Text = kvp.Value,
Width = 200,
Height = 15,
Location = folTop,
Visible = true,
Name = $"frdlbl{ctr}"
};
ctr++;
llabel.Links.Add(0, llabel.Width - 1, $"https://twitter.com/{kvp.Key}");
llabel.Click += Linklabel_Click;
grpFriends.Controls.Add(llabel);
folTop.Y += 25;
}
Как видите, логика идентична (потому что я хочу извлечь эту часть в отдельный метод, чтобы избежать повторения). Расположение задается относительно группового блока grpFriends, все остальное тоже самое. Тем не менее, LinkLabel не отображается, то есть второй групповой блок остается (визуально) пустым!
Я установил точку останова, чтобы проверить, что может пойти не так. Я пошагово прошел: правильное имя экрана извлекается, местоположение корректно, элемент управления добавляется, но ничего не появляется.
P.S .: Этот код находится в методе RunWorkerCompleted фонового работника, после этой точки дальнейший код не выполняется.
Есть идеи, почему ярлык не отображается?
Редактировать: Будь я проклят!
Я просто изменил местоположение grLFriends LinkLabel на 10,10: кажется, только что обрезав нижнюю границу группы моих друзей.
Теперь вот где это становится странным для меня:
Как видите, группа имеет значение Y 351. Точка (10,10) даже не должна быть в поле. Таким образом, кажется, что это виновник, и оригинальный код создал метку вне формы.
Замена grpFriends.Top
как значения Y на grpFriends.Top - grpFriends.Height
приблизила меня. LinkLabel ниже, чем хотелось бы, но это не так уж плохо.
Очень странно.