●难道是微软的经典错误???

foolfool 2004-07-09 10:05:38
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WinAPP01
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.TextBox textBox1;
private ArrayList myListData = new ArrayList();
private System.Windows.Forms.Button btnADD;
private System.Windows.Forms.Button btnDEL;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.listBox1 = new System.Windows.Forms.ListBox();
this.textBox1 = new System.Windows.Forms.TextBox();
this.btnADD = new System.Windows.Forms.Button();
this.btnDEL = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(225, 40);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(151, 268);
this.listBox1.TabIndex = 0;
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(26, 42);
this.textBox1.Name = "textBox1";
this.textBox1.TabIndex = 1;
this.textBox1.Text = "textBox1";
//
// btnADD
//
this.btnADD.Location = new System.Drawing.Point(132, 43);
this.btnADD.Name = "btnADD";
this.btnADD.TabIndex = 4;
this.btnADD.Text = "添加";
this.btnADD.Click += new System.EventHandler(this.btnADD_Click);
//
// btnDEL
//
this.btnDEL.Location = new System.Drawing.Point(229, 326);
this.btnDEL.Name = "btnDEL";
this.btnDEL.TabIndex = 5;
this.btnDEL.Text = "删除";
this.btnDEL.Click += new System.EventHandler(this.btnDEL_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(689, 441);
this.Controls.Add(this.btnDEL);
this.Controls.Add(this.btnADD);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.listBox1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{

}



private void btnADD_Click(object sender, System.EventArgs e)
{
myListData.Add(new listData(textBox1.Text,"VALUE"));
listBox1.DataSource=null;
listBox1.DataSource=myListData;
listBox1.DisplayMember="strTXT";
listBox1.ValueMember="strVAL";
}

private void btnDEL_Click(object sender, System.EventArgs e)
{
myListData.Remove(listBox1.SelectedItem);
listBox1.DataSource=null;
listBox1.DataSource=myListData;
listBox1.DisplayMember="strTXT";
listBox1.ValueMember="strVAL";
//listBox1.SelectedIndex=-1;

}


}

//==============================================

public class listData
{
private string myTXT;
private string myVAL;
public listData (string txt,string val)
{
this.myTXT =txt;
this.myVAL=val;
}
public string strTXT
{
get
{
return myTXT;
}
}
public string strVAL
{
get
{
return myVAL;
}
}

}
}






在Windows窗体中有一个listBox1,一个textBox1 和两个按钮,
一个按钮把textBox1中的内容添加到listBox1中(用ArrayList变量);
这个没有问题。

另外一个按钮删除listBox1中所选的当前项,如果删除的项不是最后一项时也
没有任何问题。

可是

当删除最后一项之后(listBox1中有多于1个的项)
再用光标去点击选择listBox1中的项目时

经典错误发生:

未处理的“System.ArgumentOutOfRangeException”类型的异常出现在 mscorlib.dll 中。

其他信息: 索引超出范围。必须为非负值并小于集合大小。




?????????????????????????


...全文
1082 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolfool 2004-07-12
  • 打赏
  • 举报
回复
看来还有很多其他的方法,还想多学点东西。。
再等等!
comy 2004-07-10
  • 打赏
  • 举报
回复
应该是使用的经典错误



----------------------------------------------------------------------
欢迎试用ASP.NET大文件上传组件(AspnetUpload 1.0 Release & 无刷新进度条)
http://bestcomy.europe.webmatrixhosting.net
----------------------------------------------------------------------
cjzlxy 2004-07-10
  • 打赏
  • 举报
回复
for(int i=Items;i>0;i--)
{
}
foolfool 2004-07-10
  • 打赏
  • 举报
回复
楼上的兄弟,你能知道是使用上的错误,
可否把正确的用法,写出来,让大家分享,多谢先!
ji2feng 2004-07-10
  • 打赏
  • 举报
回复
!!!!!!!
caomj 2004-07-09
  • 打赏
  • 举报
回复
设断点跟踪一下
北京的雾霾天 2004-07-09
  • 打赏
  • 举报
回复
是你的代码的执行顺序问题
melonlee 2004-07-09
  • 打赏
  • 举报
回复
GZ
xinshaw 2004-07-09
  • 打赏
  • 举报
回复
其实你没有必要每添加或删除一次都重新绑定一次,这样会造成不必要的刷新。
你只需要在List中添加一项,或删除选定项即可
foolfool 2004-07-09
  • 打赏
  • 举报
回复
to : gkwww(奔放)

差不多,知识删除之后就马上重新绑定,看上面的代码!!!


to : xinshaw(清瘦卫郎)

错误的断点在:下面的最后一个符号 “}”
问题是错的没有什么理由!!!

static void Main()
{
Application.Run(new Form1());
}
xinshaw 2004-07-09
  • 打赏
  • 举报
回复
你的程序中应该加个判断,不是微软件的错,是你自己的错
gkwww 2004-07-09
  • 打赏
  • 举报
回复
你选中的是最后一行。但随之你又将它删除。

listBox的SelectIndex已经没有了。
删除后向上移一项,再绑定(仅最后一项时。)
所以报错。不知是不是这样。
foolfool 2004-07-09
  • 打赏
  • 举报
回复
从道理上讲,本来把 listBox1 与 数据源断开后。
重新绑定,也就是listBox1 应该相当 第一此绑定,也就不应该出现改错误!
但我弄不明白其中的缘由,,,多谢 longx 赐教!!!
下周结贴!
foolfool 2004-07-09
  • 打赏
  • 举报
回复
多谢 longx ,
让咱学到东西了!!!


longx 2004-07-09
  • 打赏
  • 举报
回复
有仔细看了一下,引起错误的原因是: SelectedIndex 属性必须是一个有效的值 ,即必须在好面的 datasource 中存在,所以设置 -1 会失败,但是有一个奇怪的事情:调用 ClearSelected()方法之后, SelectedIndex 值却是 -1,在一个单独的button 事件中调用 ClearSelected()没有问题,放在上面的 Detele 事件代码中调用却有问题
看样子还是 microsoft 的 bug,
longx 2004-07-09
  • 打赏
  • 举报
回复
看样子是 microsoft 一个有关使用 datasource 的 bug
我稍微改了一点代码实现你想要的功能,绕过这个bug

private void setListDataSource()
{
ArrayList lvArrayList = new ArrayList();
lock (myListData.SyncRoot)
{
foreach (Object item in myListData)
{
lvArrayList.Add(item);
}
}
listBox1.DataSource = lvArrayList;
listBox1.DisplayMember = "strTXT";
listBox1.ValueMember = "strVAL";
}
private void btnADD_Click(object sender, System.EventArgs e)
{
myListData.Add(new listData(textBox1.Text, "VALUE"));
setListDataSource();
}
private void btnDEL_Click(object sender, System.EventArgs e)
{
myListData.Remove(listBox1.SelectedItem);
setListDataSource();
}
BillKang 2004-07-09
  • 打赏
  • 举报
回复
你可以跟踪一下重新绑定数据源后listBox1.SelectedIndex的值(不要手工设定)
chido 2004-07-09
  • 打赏
  • 举报
回复
虽然微软的产品有漏洞,但是所有软件都有漏洞,
一般情况下,不要怀疑计算机会出错,也不要怀疑微软会出错,
应该先怀疑自己。
foolfool 2004-07-09
  • 打赏
  • 举报
回复
多谢

BillKang(寂寞惯了)


了!!!



int i =listBox1.SelectedIndex;
listData ld=(listData)listBox1.SelectedItem;
if (i==myListData.Count-1)
listBox1.SelectedIndex=myListData.Count-2;
myListData.Remove(ld);
listBox1.DataSource=null;
listBox1.DataSource=myListData;
listBox1.DisplayMember="strTXT";
listBox1.ValueMember="strVAL";

就没有问题,而且还很符合删除后的记录移动。


只是 listBox1 在用 listBox.DataSource =null;
之后再重新绑定,按道理上讲 就不应该出现这样的错误。。。。。
是否listBox1和一个数据源绑定之后,背后还有什么机制
哪位给予指点???


longtusoft 2004-07-09
  • 打赏
  • 举报
回复
不要轻易怀疑M$.
加载更多回复(10)
1、请试着打开程序,如果出现错误请下载 .NET Framework 3.5,微软官方下载地址:http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe 2、可以批量打印、批量解密、批量加密、批量转换 Word、Excel 文件格式。 3、批量加密后需牢记密码,如密码丢失作者也无法解密。 4、批量解密需用户提供密码,此功能并非破解。 版本号 2.1.752.268(更新日期:2010年9月26日) 其他更新: 修改了打开文件的方式,避免了部分打开文件时弹出对话框使程序无法继续的情况。 ******************************************* 版本号 2.1.748.259(更新日期:2010年9月17日) 重要更新: ◆增加了 Excel 文件打印时可选页码范围。 ◆增加了“打印工作表”的拖动排序功能。 其他更新: 修正了“打印到文件”的两处错误 修正了“打印工作表”进度的错误 修正了“打印工作表”工作簿列表中项目丢失焦点时发生的错误。 ******************************************* 版本号 2.0.732.257(更新日期:2010年9月15日) 重要更新: ◆增加了“格式转换”功能,该功能可对 Office2007(OpenXML)格式和 Office97-2003 格式进行互相转换(如果是 Office2003 及以下的,请确认已安装 Office2007 格式兼容包,下载地址:http://download.microsoft.com/download/6/5/6/6568c67b-822d-4c51-bf3f-c6cabb99ec02/FileFormatConverters.exe)。 其他更新: 修正了打印工作表后的错误问题。 ******************************************* 版本号 1.1.674.253(更新日期:2010年9月11日) 重要更新: ◆解决了完成操作之后,后台 Excel 仍驻留内存的问题。 ◆阻止正在操作时关闭窗口,防止 Excel 或 Word 驻留内存。 其他更新: 将“窗口置顶”放到上部标题区域。 修正工作完成后“返回”时的错误修正“完成后关闭计算机”的错误再次对“操作进度”界面进行细微调整-。- 增加“添加文件”时按文件名自动排序功能(点击列头进行排序)。 修正几处逻辑错误修正几处引起程序崩溃的BUG。 增加打印设置记忆功能。 ******************************************* 版本号 1.1.569.245(更新日期:2010年9月3日) 重要更新: ◆对“打印文件”模块进行调整,支持 Word、Excel 文件按顺序混合打印(可以在“添加文件”界面调整顺序)。保留以前版本“分开类型进行打印”方式(先打印全部 Excel 文件,再打印全部 Word 文件)。 ◆更改“打印份数”的处理方式,以前版本处理方式为:将指定的文件重复项目合并计数后再乘以打印份数进行打印,此版本处理方式为:不将重复项目合并计数,完全按列表中项目分别打印。 ◆增加“逐份打印模式”。“逐份打印模式”的工作方式为:按列表中的文件(或工作表)按顺序打印一份后再进行下一轮打印,打印轮数为指定的“打印份数”。配合“分开类型进行打印”选项,可较灵活地调整打印顺序。 其他更新: 更改“添加文件”界面的查找方式。 增加“添加文件”界面的文件手动排序功能,可通过拖动排序。 增加“完成后关闭计算机”功能。 增加“窗口置顶”功能。 对“操作进度”界面进行细微调整。 ******************************************* 感谢网友“ & SkyLine”的建议和耐心的测试。
动易SiteFactory CMS是业界首款基于微软.NET2.0平台,采用ASP.NET 2.0进行分层开发的内容管理系统,具有灵活的产品架构、严密的安全性、无限的扩展性和伸缩性,能够高效构建起各种信息资讯类网站、企业内部知识网站、企业信息/产品展示门户网站、军区内网等多种网站应用型平台。 动易SiteFactory CMS 6.2.0 更新日志:2020-03-11新增:新增标签安全配置,更好地控制含supersql参数的标签的查询权限。优化:修改回源IP清单字段填写规则,可以填写比如192.168.1.*表示192.168.1.1~192.168.1.254的IP段;修改包含supersql参数的标签,尽可能地用其他参数类型替代supersql;增加验证码的复杂度,更好地防止被识别。修复:修复会员修改密码后大写字母变小写导致登录出错的bug;修复一键排版时小于大于号括起来的内容被删除的bug;修复编辑文章时标题颜色选择框不显示的bug;修复退稿按钮被禁用的bug;修复内容过滤时,如果iframe或embed标签的地址为'./'或'../'开头的相对地址时报错的bug;修复后台模板选择时能通过修改页面参数跳转到其他目录下,导致可以遍历网站其他目录的bug;修复后台导入会员时,如果导入空白或Excel格式不正确时会出错的bug;修复问答中心验证码输入错误后前台没有自动刷新,导致再次输入时提示验证码错误的bug。
为达到最佳效果,推荐使用九网互联的ASP.net空间,支持ASP.net版本1.1和2.0在线切换、在线脚本映射、ASP.net具体错误信息在线查看。版本名称:Zoomla!CMS2.0文件名称:快速安装说明文件格式:TXT版权所有:逐浪软件(Zoomla!CMS)Copyright 1998-2009 Zoomal.cn - All Rights Reserved.官方网站:www.zoomla.cn版权声明:本程序及相关文档的版权及其他权利都归江西聚合实业有限公司所有并保留一切权利。除了江西聚合实业有限公司授权许可协议所提供的明确书面许可外,拥有本程序及相关文档并不赋予您任何有关这些专利、版权或其他知识产权的许可。“逐浪”以及“zoomla”为江西聚合实业有限公司商标,软件来源:完全自主开发。************************************************************************逐浪CMS致力于为广大站长提供最优秀的开放、免费、强大的网站内核管理服务,站点基于Microsoft .net 2.0 和MSSQL2005平台开发,兼容MSSQL2000,具备良好的扩展性。为了保证系统开发和后续功能的不断成熟,逐浪CMS本着“面向专业者全面开放、面向使用者提供卓越应用体验”的精神,向所有专业的开发者、站长、Webmaster完全开源,技术者们只要提交简单的一份申请表格,即可获得我们的源码,并可畅享逐浪软件开发者俱乐部带来的收获与快乐。作为江西乃至中国中部地区首家CMS厂商,江西聚合实业有限公司打通了包括逐浪软件商标、版权、开发、空间、域名、应用一体化的脉络,其旗下华夏互联hx008.cn作为老牌主机域名与建站服务商,能够提供扎实的基础环境,并为逐浪软件开发团队提供了强有力的后盾支持。同时,我们还得到了国内外各同行、包括微软、英特尔、HP等IT巨挚的支持,在此我们致以衷心的感谢,海纳百川、有容乃大,逐浪CMS将始终以开放的精神、高标的视野,面向用户提供最优秀的程序支持。欢迎访问逐浪官方论坛bbs.zoomla.cn分享成果、参与讨论。[注:本RC版除界面模板未能提供外,功能已完全具备,可以用于建站,其性能较同行中有不少于80%的提升,并具备独有的“文件名.html”生成等功能,下一版本中我们将提供包括门户SNS在内功能,敬请期待!]本次发布更新主要包括:改进全新数据库引擎,使性能提升50%增加Oracle数据库安装程式(仅供商业版客户购买)网店系统发布提出全新的用户模型理念,使会员结构自由灵活,打造自主的“会员魔方”开放SNS系统,可以建立高品质的SNS平台,与主站完全一体,是国内首家集成SNS的高性能CMS开放会员小屋功能,让您的娱乐更加尽兴开放抢车位功能,想怎么玩就怎么玩,尽享逐浪CMS的卓越品质开放蒙面聊功能,使会员交互更加紧密,化流量为成长的力量。开放人才招聘系统,用户可在此基础构建大型人才网站或企业招聘频道高性能网店系统,可以独立建立如同淘宝、有阿、拍拍一样的大型商城改进的网上商城,电子商务轻手拈来更加卓越的访问统计系统,同步最新IP地址库,让您轻松把握网站的每一个访客调查问券系统更加精致的用户权限管理系统-使网站收费更加容易会员组系统严谨的后台权限管理系统可角色化定义的用户配置系统,引领网站安全进入“云”时代改进由网友、用户投票决定的后台登陆UI—真正为草根站长量身订制的程序新设计的会员插件功能与开放计算平台Ajax的商城系统体验改进更多的细节改进,尽在您的体验

110,533

社区成员

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

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

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