2016-06-21 4 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

Dictionary 에 참조를 중복하여 저장할 수 있으며이를 제거하려면 사전에서 참조를 가져와 적절한 인스턴스를 요청하십시오. 분명히 사전에서도 제거하는 것을 잊지 마십시오. –

+0

ID 만 갖고 싶으면 Tag 속성을 사용하고 friendRequestPanel.Controls에서 해당 항목을 찾아 제거 할 참조를 가져올 수 있습니다. –

+0

['Name'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.control.name (v = vs.110) .aspx) 속성은 이러한 용도로 사용됩니다. 당신은 그 이름을 사용하는 부모의'Controls' 콜렉션에서 제어 할 이름을 할당 할 수 있습니다. –

답변

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

할 수 없습니다. 이름은 String 속성입니다. 하지만 당신은 항상 integer.ToString() 메서드를 호출하여 정수로 문자열을 변환 할 수 있습니다. 분명히 문자열을 제거하기 전에 찾고자하는 int를 문자열로 변환하는 것을 잊지 마십시오. –