亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以編程方式添加的 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 關注
  • 160 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號