2016-06-21 36 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转换为字符串。 –

相关问题