我有一个问题是它一次只能占用一个人。如果两个人在里面,那么你只能禁止那些同情的人。如果我是自我内心,那么一切正常。
视频:http://tinypic.com/player.php?v=2d17pm0%3E&s=8#.U9KnGfl_tvB
我需要帮助来修复代码以使其正常工作? 当我右键单击一行并尝试禁止时。然后尝试它禁止我,而不是我想的那条线。
private void UserListUpdate(string rawdata)
{
var data = rawdata.Deserialize();
listView1.Items.Clear();
foreach (var user in data)
{
var attr = user.Deserialize();
string nick = attr[0];
string role = attr[1];
bool isbanned = attr[2].ToLower() == "true";
string userid = attr[3];
string isbannedText = "";
var ban = new MenuItem("Ban", (a, b) => Client.WritePacket(Packets.UpdateRole(userid, "banned")));
var unban = new MenuItem("Unban", (a, b) => Client.WritePacket(Packets.UpdateRole(userid, "unbanned")));
var admin = new MenuItem("Admin", (a, b) => Client.WritePacket(Packets.UpdateRole(userid, Sets.UserRole.Admin)));
var reg = new MenuItem("Regularize", (a, b) => Client.WritePacket(Packets.UpdateRole(userid, Sets.UserRole.Regular)));
var kill = new MenuItem("Kill", (a, b) => Client.WritePacket(Packets.Kill(userid)));
mnuContextMenu.MenuItems.Clear();
mnuContextMenu.MenuItems.AddRange(new[] { admin, reg, GetSep(), ban, unban, GetSep(), kill });
ListViewItem t = new ListViewItem(nick);
if(isbanned == true)
{
isbannedText = "Bannad";
}
t.SubItems.Add(role);
t.SubItems.Add(isbannedText);
t.SubItems.Add(userid);
listView1.Items.Add(t);
}
}
private void listView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ContextMenu = mnuContextMenu;
}
}
private MenuItem GetSep()
{
return new MenuItem("-");
}
所以我做了但仍然不起作用。
private void UserListUpdate(string rawdata)
{
var data = rawdata.Deserialize();
listView1.Items.Clear();
foreach (var user in data)
{
var attr = user.Deserialize();
string nick = attr[0];
string role = attr[1];
bool isbanned = attr[2].ToLower() == "true";
string userid = attr[3];
string isbannedText = "";
var ban = new MenuItem("Ban", BanMenu_Clicked);
var unban = new MenuItem("Unban", BanMenu_Clicked);
var admin = new MenuItem("Admin", BanMenu_Clicked);
var reg = new MenuItem("Regularize", BanMenu_Clicked);
var kill = new MenuItem("Kill", BanMenu_Clicked);
mnuContextMenu.MenuItems.Clear();
mnuContextMenu.MenuItems.AddRange(new[] { admin, reg, GetSep(), ban, unban, GetSep(), kill });
ListViewItem t = new ListViewItem(nick);
if(isbanned == true)
{
isbannedText = "Bannad";
}
t.SubItems.Add(role);
t.SubItems.Add(isbannedText);
t.SubItems.Add(userid);
listView1.Items.Add(t);
}
}
private void BanMenu_Clicked(object sender, EventArgs e) {
foreach (ListViewItem li in listView1.SelectedItems) {
Client.WritePacket(Packets.UpdateRole(li.SubItems[2].ToString(), "banned")));
}
}
private void listView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ContextMenu = mnuContextMenu;
}
}
private MenuItem GetSep()
{
return new MenuItem("-");
}
编辑2
private void UserListUpdate(string rawdata)
{
var data = rawdata.Deserialize();
listView1.Items.Clear();
foreach (var user in data)
{
var attr = user.Deserialize();
string nick = attr[0];
string role = attr[1];
bool isbanned = attr[2].ToLower() == "true";
string userid = attr[3];
string isbannedText = "";
var ban = new MenuItem("Ban", BanMenu_Clicked);
var unban = new MenuItem("Unban", UnBanMenu_Clicked);
var admin = new MenuItem("Admin", (a, b) => Client.WritePacket(Packets.UpdateRole(userid, Sets.UserRole.Admin)));
var reg = new MenuItem("Regularize", (a, b) => Client.WritePacket(Packets.UpdateRole(userid, Sets.UserRole.Regular)));
var kill = new MenuItem("Kill", (a, b) => Client.WritePacket(Packets.Kill(userid)));
mnuContextMenu.MenuItems.Clear();
mnuContextMenu.MenuItems.AddRange(new[] { admin, reg, GetSep(), ban, unban, GetSep(), kill });
ListViewItem t = new ListViewItem(nick);
if(isbanned == true)
{
isbannedText = "Bannad";
}
t.SubItems.Add(role);
t.SubItems.Add(isbannedText);
t.SubItems.Add(userid);
listView1.Items.Add(t);
}
}
private void BanMenu_Clicked(object sender, EventArgs e) {
foreach (ListViewItem li in listView1.SelectedItems) {
Client.WritePacket(Packets.UpdateRole(li.SubItems[3].Text, "banned"));
MessageBox.Show(li.SubItems[3].Text);
}
}
private void UnBanMenu_Clicked(object sender, EventArgs e)
{
foreach (ListViewItem li in listView1.SelectedItems)
{
Client.WritePacket(Packets.UpdateRole(li.SubItems[3].Text, "unbanned"));
MessageBox.Show(li.SubItems[3].Text);
}
}
private void listView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Point pt = listView1.PointToScreen(e.Location);
//contextMenuStrip1.Show(pt);
ContextMenu = mnuContextMenu;
//MessageBox.Show("Jaa");
}
}
private MenuItem GetSep()
{
return new MenuItem("-");
}
答案 0 :(得分:0)
您需要在ListView控件中引用SelectedItems属性以查看当前突出显示的项目,并且由于您的数据只能在ListView中找到,因此您必须从中获取信息。
这样的事情:
var banMenu = new MenuItem("Ban", BanMenu_Clicked);
private void BanMenu_Clicked(object sender, EventArgs e) {
foreach (ListViewItem li in listView1.SelectedItems) {
Client.WritePacket(Packets.UpdateRole(li.SubItems[2].ToString(), "banned")));
}
}
您的UserListUpdate
方法正在创建,然后在每次循环迭代中删除菜单项。您应该只在表单的构造函数中创建一次这些菜单项。