怎样使statustrip文本信息滚动显示

liulei68211 2016-10-26 08:45:19
string pjname ="";
int id =0;
string sqlselect = "select pk_iID,cprojectName,CONVERT(varchar(12),tfinish_day,105) as tfinish_day from project_information where tfinish_day<getdate()";
SqlCommand mycom = new SqlCommand(sqlselect, mycon);
SqlDataReader mydr;
mydr = mycom.ExecuteReader();
if (mydr.HasRows)
{
while(mydr.Read())
{
pjname = mydr.GetString(1);
id = mydr.GetInt32(0);
tlst3.Text = "项目'" + pjname + "'将要过期,项目编号为'" + id + "'";
MessageBox.Show("项目'" + pjname + "'将要过期,项目编号为'" + id + "'");
}
现在的问题是数据库中有多个数据,在tlsl3中显示的时候只显示最后读出的那一个,之前的都被覆盖
请问怎么解决?能让读出的所有信息滚动播出
...全文
346 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuhang08 2016-10-26
  • 打赏
  • 举报
回复
引用 7 楼 liulei68211 的回复:
怎么能让它只显示一行然后滚动显示啊,大神?
那就直接等于就行了 tlst3.Text = "项目'" + pjname + "'将要过期,项目编号为'" + id + "'"; System.Threading.Thread.Sleep(5000);//5秒出一条数据
liulei68211 2016-10-26
  • 打赏
  • 举报
回复

怎么能让它只显示一行然后滚动显示啊,大神?
xuhang08 2016-10-26
  • 打赏
  • 举报
回复
引用 5 楼 xuhang08 的回复:
tlst3.Text = "项目'" + pjname + "'将要过期,项目编号为'" + id + "'";
这里要改下tlst3.Text += "项目'" + pjname + "'将要过期,项目编号为'" + id + "'"+"\r\n";
xuhang08 2016-10-26
  • 打赏
  • 举报
回复
tlst3.Text = "项目'" + pjname + "'将要过期,项目编号为'" + id + "'";
xuhang08 2016-10-26
  • 打赏
  • 举报
回复
你要显示到TextBox的话可以用BackgroundWorker

BackgroundWorker bgw;
private void ShowResult()
{
    CheckForIllegalCrossThreadCalls = false;
    bgw = new BackgroundWorker();
    bgw.DoWork += new DoWorkEventHandler(bgwl_DoWork);
    bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwl_RunWorkerCompleted);
    bgw.WorkerSupportsCancellation = true;
    bgw.RunWorkerAsync();
}

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
     ……//你的代码
     while(mydr.Read())
      {       
               if (bgw.CancellationPending)
                    return;
               pjname = mydr.GetString(1);                      
               id = mydr.GetInt32(0);                                         
               tlst3.Text = "项目'" + pjname + "'将要过期,项目编号为'" + id + "'";
     }
}

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("结束", "提示框");
        }
liulei68211 2016-10-26
  • 打赏
  • 举报
回复

TextBox只显示最后一条信息
liulei68211 2016-10-26
  • 打赏
  • 举报
回复

运行后显示

怎样能让Textbox也显示两条记录
  • 打赏
  • 举报
回复
“滚动”是个定时行为。纠结“死循环”流程是一种很低级的错误设计(有些人再用子线程去错上加错)。
一支糖包仔 2016-10-26
  • 打赏
  • 举报
回复
例如:【aaaa】aa___bbbbbb___ cccccc___ 然后删除的时候可以用substring removeat等然后在末尾追加刚刚删除的字符+=或者append等 删除的效果做成这样 【aa】___bbbbbb___ cccccc___aa
一支糖包仔 2016-10-26
  • 打赏
  • 举报
回复
我觉得还是用timer比sheep好一点,只显示最后一条数据是因为你每次给文本框赋值都把上一次的内容替换了。如果要做到滚动效果的话可以把所有的内容全部用一个字符串存起来,然后在文本框上赋值,接着根据时间控件来控制从头把文本框里面的字符删除,再在末尾追加。 代码不难,就是格式和时间要调整。
yang1216 2016-10-26
  • 打赏
  • 举报
回复
粗暴一点啊 直接timer 每秒钟改一下状态栏的字
xuhang08 2016-10-26
  • 打赏
  • 举报
回复
引用 10 楼 xuhang08 的回复:
[quote=引用 9 楼 liulei68211 的回复:] 不行啊大神,只显示最后一条信息记录 而且登录进主界面时变慢了
一开始你没描述清楚,如果是加载窗体的时候显示,那么需要使用Form_Shown事件

private void Form_Shown(object sender, EventArgs e)
        {
            ShowResult();
        }
BackgroundWorker bgw;
private void ShowResult()
        {
            CheckForIllegalCrossThreadCalls = false;
            bgw = new BackgroundWorker();
            bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
            //bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
            bgw.WorkerSupportsCancellation = true;
            bgw.RunWorkerAsync();
        }
private void bgw_DoWork(object sender, DoWorkEventArgs e)
        {
            ……//你的代码
             while(mydr.Read())
            {       
               if (bgw.CancellationPending)
                    return;
               pjname = mydr.GetString(1);                      
               id = mydr.GetInt32(0);                                         
               tlst3.Text = "项目'" + pjname + "'将要过期,项目编号为'" + id + "'";
            }
        }
//private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        //{
        //    MessageBox.Show("结束", "提示框");
        //}
[/quote] while(mydr.Read()) { ……// System.Threading.Thread.Sleep(5000);//while循环这里还是加个延迟,5秒显示一个 }
xuhang08 2016-10-26
  • 打赏
  • 举报
回复
引用 9 楼 liulei68211 的回复:
不行啊大神,只显示最后一条信息记录 而且登录进主界面时变慢了
一开始你没描述清楚,如果是加载窗体的时候显示,那么需要使用Form_Shown事件

private void Form_Shown(object sender, EventArgs e)
        {
            ShowResult();
        }
BackgroundWorker bgw;
private void ShowResult()
        {
            CheckForIllegalCrossThreadCalls = false;
            bgw = new BackgroundWorker();
            bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
            //bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
            bgw.WorkerSupportsCancellation = true;
            bgw.RunWorkerAsync();
        }
private void bgw_DoWork(object sender, DoWorkEventArgs e)
        {
            ……//你的代码
             while(mydr.Read())
            {       
               if (bgw.CancellationPending)
                    return;
               pjname = mydr.GetString(1);                      
               id = mydr.GetInt32(0);                                         
               tlst3.Text = "项目'" + pjname + "'将要过期,项目编号为'" + id + "'";
            }
        }
//private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        //{
        //    MessageBox.Show("结束", "提示框");
        //}
liulei68211 2016-10-26
  • 打赏
  • 举报
回复

不行啊大神,只显示最后一条信息记录
而且登录进主界面时变慢了

111,131

社区成员

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

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

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