如何阻止事件的执行

vber1010 2008-11-14 12:26:38
有个listView1
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count != 0)
//这里的代码功能是不让listView1_SelectedIndexChanged触发,但是不要修改listView1_SelectedIndexChanged事件,
//该事件已经在其它地方绑定了执行方法。

}
如何做到?
...全文
197 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vber1010 2008-11-14
  • 打赏
  • 举报
回复
//问题是这样的,执行下面的代码后出现了两个问题
//一:每次选择listView1中的每一项时都是出现Not found提示,为什么?
//二:第一次点击listView1中的一项时只出现一次提示,再点击另一项时会出现两次提示,即引发了两次Example_SelectedindexChanged事件,为什么?
//有位达人告诉我这是 listView1机制,让我用listView1.SelectedItems.Count == 0判断,再引发change事件。我不知道这样写对不对。但是return
//好像没效果。 所有代码都贴出来了 。谢谢



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Data.SqlClient;
using System.IO;

namespace xml_ADO.net
{
public partial class Form1 : Form
{
private XmlDocument doc = new XmlDocument();
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
listView1.SelectedIndexChanged += new EventHandler(Example_SelectedindexChanged );
DataSet ds = new DataSet("XMLAuthors");
SqlConnection conn = new SqlConnection("server=(local); integrated security=SSPI;database=Northwind");
SqlDataAdapter da = new SqlDataAdapter("select * from categories ",conn );
MemoryStream memstrm = new MemoryStream();
StreamReader strmRead = new StreamReader(memstrm );
StreamWriter strmWrite = new StreamWriter(memstrm );
da.Fill(ds,"Authors");
dataGridView1.DataSource = ds.Tables[0];
ds.WriteXml(strmWrite ,XmlWriteMode.IgnoreSchema );
memstrm.Seek(0, SeekOrigin.Begin);
doc.Load(strmRead);
doc.Save("mm.xml");
XmlNodeList nodelst = doc.SelectNodes("//CategoryName");
foreach (XmlNode nd in nodelst)
listView1.Items.Add(nd.InnerText );
}
private void Example_SelectedindexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count == 0)
{
string srch = "XMLAuthors/Authors[CategoryName= '" + listView1.SelectedItems[0].ToString() + "'" + "]";
XmlNode foundNode = doc.SelectSingleNode(srch);
if (foundNode != null)
MessageBox.Show(foundNode.OuterXml);
else
MessageBox.Show("Not found");

}
}

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{


}
}
}
zfh198601 2008-11-14
  • 打赏
  • 举报
回复
据说可以用ajax,不过我也不会用ajax
  • 打赏
  • 举报
回复
不明白你的意思,你是如果符合条件的,那以后都不再执行listView1_SelectedIndexChanged方法吗?

那直接就将listView1.AutoPostBack = false;
Teng_s2000 2008-11-14
  • 打赏
  • 举报
回复
什么也不写,不行吗?
别的地方实现了,在这儿还写这个事件干吗呢
feiyun0112 2008-11-14
  • 打赏
  • 举报
回复
return;

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
http://feiyun0112.cnblogs.com/
vber1010 2008-11-14
  • 打赏
  • 举报
回复
我重新建了项目 将代码做了修改才可以。非常感谢!
jietuan 2008-11-14
  • 打赏
  • 举报
回复
如果不符合执行条件就:

listView1.SelectedIndexChanged-=......

符合就:

listView1.SelectedIndexChanged+=......

这是动态绑定event 执行方法
llsen 2008-11-14
  • 打赏
  • 举报
回复
web 吗?
用js

function checklistView1_Selected()
{
var drop = document.getElementById('listView1');

if(drop.selectedIndex == 0)
{
return false;
}
else
{
return true;
}
}


后台load事件里面添加

listView1.Attritubes.Add("onchange"," return checklistView1()");
feiyun0112 2008-11-14
  • 打赏
  • 举报
回复
private int iLastSelectIndex = -1;
private void Example_SelectedindexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count>0 && listView1.SelectedItems[0].Index != iLastSelectIndex)
{
iLastSelectIndex = listView1.SelectedItems[0].Index;
string srch = "XMLAuthors/Authors[CategoryName= '" + listView1.SelectedItems[0].ToString() + "'" + "]";
XmlNode foundNode = doc.SelectSingleNode(srch);
if (foundNode != null)
MessageBox.Show(foundNode.OuterXml);
else
MessageBox.Show("Not found");

}
}

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧