2016-06-21 96 views
0

我有我的程序有點麻煩。目前,我正在編寫一個好友請求腳本,基本上當用戶收到好友請求,它會自動將其添加到FlowLayoutPanel和每個朋友的要求,用戶的名字會顯示連同接受和拒絕按鈕。下面的代碼:c#我如何設置按鈕ID並在稍後刪除它?

foreach (object request in i.ToString()) 
{ 
    Label userName = new Label(); 
    Button accept = new Button(); 
    Button reject = new Button(); 
    accept.Click += Accept_Click; 
    reject.Click += Reject_Click; 
    userName.Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(dr["UserFirstName"].ToString() + " " + dr["UserLastName"].ToString()); 
    accept.Text = "Accept"; 
    reject.Text = "Reject"; 
    friendRequestPanel.Controls.Add(userName); 
    friendRequestPanel.Controls.Add(accept); 
    friendRequestPanel.Controls.Add(reject); 
} 

它看起來像什麼: GUI

現在的問題是,當用戶接受或拒絕的請求,這似乎刪除所有的標籤和按鈕。 代碼:

friendRequestPanel.Controls.Remove(UserName); // Label 
friendRequestPanel.Controls.Remove(accept); // Button 
friendRequestPanel.Controls.Remove(rejects); // Button 

我將如何分配一個ID,每個按鈕和標籤,這樣我以後可以刪除嗎? 是這樣的:friendRequestPanel.Controls.Remove(username[ID No]);

+0

您可以將引用冗餘存儲在一個詞典<字符串,對象>,當你想刪除它,獲得從詞典中引用了相應的實例請求。顯然,不要忘記從字典中刪除它。 –

+0

如果您只想要一個ID,可以使用Tag屬性,並在friendRequestPanel.Controls中查找適當的名稱以獲取要刪除的引用。 –

+0

['Name'](https://msdn.microsoft.com/en-us/library/system.windows.forms.control.name(v = vs.110).aspx)屬性就是爲了這樣的用法。您可以爲控件指定一個名稱,然後使用該名稱在其父項的「控件」集合中找到它。 –

回答

0

你應該爲那些按鈕的控制和動態創建它們。將它們存儲到List<MyControl>並在需要時刪除控件。因爲你想「分組」他們。

0

我已經改變了你的代碼有點爲了簡化代碼。希望你覺得它有用。

 string[] tags = new string[] { "A", "B", "C" }; 

     foreach (string request in tags) 
     { 
      Label userName = new Label(); 
      userName.Name = request; 
      Button accept = new Button(); 
      accept.Name = request; 

      Button reject = new Button(); 
      reject.Name = request; 

      userName.Text = request; 
      accept.Text = "Accept"; 
      reject.Text = "Reject"; 
      friendRequestPanel.Controls.Add(userName); 
      friendRequestPanel.Controls.Add(accept); 
      friendRequestPanel.Controls.Add(reject); 
     } 

     // Just remove the "B"s 
     friendRequestPanel.Controls.RemoveByKey("B"); 

很明顯,這不是你想要做的最好的方法。但解決你的問題。

+0

我將如何使用int,而不是字符串(標籤)? – richardj97

+0

你不能。 Name是一個String屬性。但你總是可以調用integer.ToString()方法來轉換你的整數字符串。顯然,在嘗試刪除它之前,不要忘記將你正在查找的int轉換爲字符串。 –

相關問題