C# 我不明白为什么这个按钮不能删除
基本上。。。当用户接受或拒绝好友请求时,应该删除用户名、接受和拒绝按钮,但只删除用户名和拒绝按钮。我不明白。代码:C# 我不明白为什么这个按钮不能删除,c#,winforms,flowlayout,C#,Winforms,Flowlayout,基本上。。。当用户接受或拒绝好友请求时,应该删除用户名、接受和拒绝按钮,但只删除用户名和拒绝按钮。我不明白。代码: private void loadFriendRequests() { using (SqlConnection connection = new SqlConnection(con)) { using (SqlCommand cmd = new SqlCommand(@"Select IDReques
private void loadFriendRequests()
{
using (SqlConnection connection = new SqlConnection(con))
{
using (SqlCommand cmd = new SqlCommand(@"Select IDRequest, UserFirstName, UserLastName, FriendEmail From PendingRequests Where FriendEmail = @fe", connection))
{
connection.Open();
cmd.Parameters.AddWithValue("@fe", Properties.Settings.Default.Email);
using (SqlDataReader dr = cmd.ExecuteReader())
{
int i = 0;
while (dr.Read())
{
i++;
foreach (object request in i.ToString())
{
Label userName = new Label();
Button accept = new Button();
Button reject = new Button();
accept.Text = "Accept";
reject.Text = "Reject";
int idRequest = Convert.ToInt32(dr["IDRequest"]);
userName.Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(dr["UserFirstName"].ToString() + " " + dr["UserLastName"].ToString());
userName.Tag = idRequest;
accept.Tag = idRequest;
reject.Tag = idRequest;
accept.Click += Accept_Click;
reject.Click += Reject_Click;
friendRequestPanel.Controls.Add(userName);
friendRequestPanel.Controls.Add(accept);
friendRequestPanel.Controls.Add(reject);
}
}
}
}
}
Requests.Start();
}
private void Reject_Click(object sender, EventArgs e)
{
Button c = sender as Button;
int idRequest = Convert.ToInt32(c.Tag);
var ctrls = friendRequestPanel.Controls
.Cast<Control>()
.Where(x =>
Convert.ToInt32(x.Tag) == idRequest);
foreach (Control ct in ctrls)
{
friendRequestPanel.Controls.Remove(ct);
ct.Dispose();
}
updateFriendRequestDatabase(2);
}
private void Accept_Click(object sender, EventArgs e)
{
Button c = sender as Button;
int idRequest = Convert.ToInt32(c.Tag);
var ctrls = friendRequestPanel.Controls
.Cast<Control>()
.Where(x => x.Tag != null &&
Convert.ToInt32(x.Tag) == idRequest);
foreach (Control ct in ctrls)
{
friendRequestPanel.Controls.Remove(ct);
ct.Dispose();
}
updateFriendRequestDatabase(1);
}
图片:
单击任何按钮时:
为什么不删除“接受”按钮?您正在循环过程中更改集合。要解决此问题,可以在找到控件的条件末尾调用ToList,然后循环结果。通过这种方式,您可以循环浏览与要更改的集合不同的列表:
var ctrls = friendRequestPanel.Controls.Cast<Control>()
.Where(Convert.ToInt32(x.Tag) == idRequest)
.ToList(); //<--- Creates a new List<Control>
foreach (Control ct in ctrls)
{
friendRequestPanel.Controls.Remove(ct);
ct.Dispose();
}
您是否确实在代码中放置了断点,并逐步查看了预期的失败位置。。请先这样做。你不能指望我们根据你发布的所有代码为你检查这些代码。。谢谢,这是我的密码,修好它。我问自己的第一个问题是,OP是否调试了自己的代码?你的“接受”按钮在ctrls枚举中吗?这就像说我不明白为什么我没有中彩票一样,你从来没有买过彩票。在第一个功能之后,“接受”按钮的标签是什么?可能是空的?OP注意:当你发布了大量与数据库相关的代码时,很难找到问题,因为问题可能是由任何部分造成的,没有人能够简单地重现问题。如果你发帖,这个问题会得到更多的关注和更有效的帮助。一个格式良好的问题对未来的读者也会更有用:谢谢Reze Aghaei,我花了好几个小时试图解决它,我确实尝试了“ToList”,但它不起作用,但它现在起作用了:谢谢你,伙计。