数据表中记录为何会“隐身”?我在做一摇号系统。有一功能:点击按钮,frmChild1上的Timer1启动,TextBox1便不停滚动显示数据表Person中的记录。 private void timer1_Tick(object sender, EventArgs e)
{
//获取Person表
DataTable myDT = this.dataDataSet1.Person;
//创建随机数
Random rnd = new Random();
//根据记录总数获取随机数
int i = rnd.Next(myDT.Rows.Count); //-------@@@@@@-------
//获取该行记录
DataRow dtRow = myDT.Rows[i];
//显示该行记录的编号
textBox1.Text = dtRow["编号"].ToString();
}如果在frmChild1上设一按钮来激活Timer,则程序运行正确:
private void btnCmd_Click(object sender, EventArgs e)
{
myTimer1.Enabled = true; //----------在这里激活Timer-----------
}其中,myTimer1在frmChild类中定义如下:
public Timer myTimer1
{
get
{
return timer1;
}
}然而,如果从另一窗体frmOutlookBar的按钮上激活frmChild1的Timer,则程序运行错误:
void OnOutlookBarItemClicked(OutlookBarBand band, OutlookBarItem item)
{
switch (item.Text)
{
case "开始":
frmChild1 myfrmChild1=GetfrmChild1();
myfrmChild1.myTimer1.Enabled = true; //----------在这里激活Timer-----------
break;
……
}
}
其中,在frmOutlookBar中通过静态变量法调用frmChild:
//定义被动窗体类型的静态私有成员属性
private static frmChild1 myfrmChild1 = null;
//定义被动窗体类型的私有成员方法
//作用:如果实例不存在(未初始化或已卸载)则创建并返回创建的实例,否则返回已有实例。
private frmChild1 GetfrmChild1()
{
if (myfrmChild1 == null || myfrmChild1.IsDisposed)
{
myfrmChild1 = new frmChild1();
}
return myfrmChild1;
}事实上,调用窗体和激活Timer没出任何问题,同样能进入timer1_Tick事件,问题出在@@@@@@处(见第一段代码),运行到该语句时,系统报错:“在位置 0 处没有任何行。”经调试发现,Count为0,奇怪的是myDT.Rows依旧正常,所以我的问题是“数据表中记录为何会“隐身”?”明明多窗体之间调用控件没有问题,成功激活Timer,那问题能出在哪儿呢?需要说明的是,这两个窗体都为MDI子窗体,数据在设计frmChild1窗体时中便已加载,也就是说,在我通过两种不同途径激活Timer时,数据都在内存中是可用的。
{
//获取Person表
DataTable myDT = this.dataDataSet1.Person;
//创建随机数
Random rnd = new Random();
//根据记录总数获取随机数
int i = rnd.Next(myDT.Rows.Count); //-------@@@@@@-------
//获取该行记录
DataRow dtRow = myDT.Rows[i];
//显示该行记录的编号
textBox1.Text = dtRow["编号"].ToString();
}如果在frmChild1上设一按钮来激活Timer,则程序运行正确:
private void btnCmd_Click(object sender, EventArgs e)
{
myTimer1.Enabled = true; //----------在这里激活Timer-----------
}其中,myTimer1在frmChild类中定义如下:
public Timer myTimer1
{
get
{
return timer1;
}
}然而,如果从另一窗体frmOutlookBar的按钮上激活frmChild1的Timer,则程序运行错误:
void OnOutlookBarItemClicked(OutlookBarBand band, OutlookBarItem item)
{
switch (item.Text)
{
case "开始":
frmChild1 myfrmChild1=GetfrmChild1();
myfrmChild1.myTimer1.Enabled = true; //----------在这里激活Timer-----------
break;
……
}
}
其中,在frmOutlookBar中通过静态变量法调用frmChild:
//定义被动窗体类型的静态私有成员属性
private static frmChild1 myfrmChild1 = null;
//定义被动窗体类型的私有成员方法
//作用:如果实例不存在(未初始化或已卸载)则创建并返回创建的实例,否则返回已有实例。
private frmChild1 GetfrmChild1()
{
if (myfrmChild1 == null || myfrmChild1.IsDisposed)
{
myfrmChild1 = new frmChild1();
}
return myfrmChild1;
}事实上,调用窗体和激活Timer没出任何问题,同样能进入timer1_Tick事件,问题出在@@@@@@处(见第一段代码),运行到该语句时,系统报错:“在位置 0 处没有任何行。”经调试发现,Count为0,奇怪的是myDT.Rows依旧正常,所以我的问题是“数据表中记录为何会“隐身”?”明明多窗体之间调用控件没有问题,成功激活Timer,那问题能出在哪儿呢?需要说明的是,这两个窗体都为MDI子窗体,数据在设计frmChild1窗体时中便已加载,也就是说,在我通过两种不同途径激活Timer时,数据都在内存中是可用的。
解决方案 »
- c#新手想解析一下别人的源程序
- 如何取得gridview是否有資料聯結的bool值
- bindingsource的重新绑定问题
- C# FTP LIST
- 今天看入门经典被例题难住了 看了一天都没看明白!求个好人给解释下!
- 清除webbrowser document 内容
- 关于非静态方法调用静态成员的理解(及时给分)
- Textbox中把其中的‘字符串’转化为float格式的问题!
- 请教高手! 在线求助(一个Socket权限的问题): QQ:9531511 请教高手!
- 请问如何读取修改MP3文件中属性中摘要页的标题等属性?????????????????????
- 简单的日期格式处理问题?
- 求助:QQ的实现原理
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
然后再DataRow dtRow = myDT.Rows[i];否则应该会数组越界吧??
个人意见,你试试……
public A()
{
_instance = this; ----------#####这句话要放在frmChild1的所有构造函数中####--------
}public static A Instance
{
get
{
return _instance;
}
}
}你通过A.Instance.myTimer引用Timer。这样调用的前提是myfrmChild1窗体已呈现。如若没有呈现,也可以修改Instance属性。
public static A Instance
{
get
{
if(_instance==null)
(new A()).Show();return _instance;
}
}
private frmChild1 GetfrmChild1()
{
if (myfrmChild1 == null || myfrmChild1.IsDisposed)
{
myfrmChild1 = new frmChild1();
}
return myfrmChild1;
}
this.personTableAdapter.Fill(this.dataDataSet1.Person)
语句在frmChild1_Load中,当我把该语句转移到frmChild1的构造函数中时,上述问题得以解决,系统不再报错,可是
textBox1.Text = dtRow["编号"].ToString();
却并没有好好执行,textBox1中什么内容都没有。我在这个语句下加了句
textBox1.Refresh();
MessageBox1.Show(textBox1.Text);
结果MessageBox中内容正常,textBox1中还是没有内容,明明textBox1.Text有值,窗体上却没显示,咋回事?
我尝试着把TextBox1做成公有变量myTextBox1,还是没用。
您说的我程序中有。to:feiyun0112(http://feiyun0112.cnblogs.com/)
您说的对!但不明白为何在Form_Load中初始化同在构造函数中初始化有差别
frmChild1 myfrmChild1=GetfrmChild1();myfrmChild1.show() ;//你窗体在哪显示的? myfrmChild1.myTimer1.Enabled = true; //----------在这里激活Timer-----------
break;
好像不管用呵,还是谢谢!肯定给您分。
搞定就散分呵。
而messagebox.Show()则暂停了线程的执行有或者
在frmOutlookbar_Load中使用了
frmChild1 myfrmChild1=GetfrmChild1();
我在GetfrmChild1()的
myfrmChild1 = new frmChild1();
加了断点,发现该语句在点击按钮时并没有执行,说明确实是调用已有的窗体呀。
to:Silicon_Fado(俩醒叁醉)
早就改成1000了。确实不显示。
可是myfrmChild1 = new frmChild1();并没执行啊。