为了账号安全,请及时绑定邮箱和手机立即绑定

以编程方式添加的 LinkLabel 不可见

以编程方式添加的 LinkLabel 不可见

C#
桃花长相依 2022-07-23 09:22:25
我遇到了一个奇怪的现象:我有一个带有四个 GroupBox 的 WinForms 应用程序,四个最初都是空的。我用它来跟踪 Twitter 上的新关注者/取消关注者,计划在此功能正常运行后扩大其使用范围。它确实适用于新的追随者。对于这些,我有一个名为 grpFollow 的 GroupBox,我将 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 只是一个将用户 ID 传递给 Twitter API 并返回该用户的名称和屏幕名称的函数。工作正常,没问题。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 没有显示,即第二个组框(视觉上)仍然是空的!我设置了一个断点来检查可能出现的问题。我单步执行:正在检索正确的屏幕名称,位置正确,添加了控件 - 但什么都没有出现。PS:这段代码在后台worker的RunWorkerCompleted方法中,此后不再执行代码。知道为什么不显示标签吗?
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

这里的错误是我假设,LinkLabels 需要一个相对于表单的位置。但是,当将它们添加到 GroupBox 的 Controls 集合时,它们会自动假定相对于 GroupBox 而不是 Form 的位置。


所以,我的代码现在对于所有四个组框基本相同,如下所示:


PopulateGroup(newFollowers, grpFollow);

PopulateGroup(unFollow, grpLost);

PopulateGroup(newFriends, grpFriends);

PopulateGroup(unFriend, grpDitched);

和:


private void PopulateGroup(List<string> collPeople, GroupBox groupBox)

{

    var folTop = new Point(12, 25);

    foreach (var fol in collPeople)

    {

        var kvp = LookupUser(fol);

        if (string.IsNullOrEmpty(kvp.Key)) continue;

        var linklabel = new LinkLabel()

        {

            Text = kvp.Value,

            Width = 200,

            Height = 15,

            Location = folTop

        };

        ctr++;

        linklabel.Links.Add(0, linklabel.Width - 1, $"https://twitter.com/{kvp.Key}");

        linklabel.Click += Linklabel_Click;

        groupBox.Controls.Add(linklabel);

        folTop.Y += 25;

    }

}

因此,组框是在表单的左侧还是右侧,顶部还是底部并不重要......


查看完整回答
反对 回复 2022-07-23
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信