none
StatusStrip 实时显示问题 RRS feed

  • 问题

  • 在窗体的代码中调用底层类库中的一个方法,要把这个方法中执行的结果实时的显示到窗体中的状态栏上,请问该怎么做,谢谢!

    2010年5月12日 4:51

答案

  •  public partial class Demo: Form
     {
      public StatusStrip s = new StatusStrip();
      public ToolStripLabel lable = new ToolStripLabel();
      public ToolStripItem[] item = new ToolStripItem[1];
      //前面三个你可以自己拖控件进去
      public Demo()
      {
       InitializeComponent();
    
    
       lable.Text = "init"; 
       item[0] = lable;
       s.Items.AddRange(item);
       this.Controls.AddRange(new Control[] { s });
    
    
      }
       //返回结果的时候调用一下这个方法
       public void setStatusStripValue(string value){
       lable.Text=value;
    
       }
     
    
      
     }

    **另外 如果你使用StatusBar控件     可以直接对  StatusBar的实例对象  的Text 属性赋值          结果会显示在状态栏上

    • 已编辑 用心 2010年5月12日 5:21 加入其它方法
    • 已标记为答案 Quorra 2010年5月12日 7:32
    2010年5月12日 5:17

全部回复

  •  public partial class Demo: Form
     {
      public StatusStrip s = new StatusStrip();
      public ToolStripLabel lable = new ToolStripLabel();
      public ToolStripItem[] item = new ToolStripItem[1];
      //前面三个你可以自己拖控件进去
      public Demo()
      {
       InitializeComponent();
    
    
       lable.Text = "init"; 
       item[0] = lable;
       s.Items.AddRange(item);
       this.Controls.AddRange(new Control[] { s });
    
    
      }
       //返回结果的时候调用一下这个方法
       public void setStatusStripValue(string value){
       lable.Text=value;
    
       }
     
    
      
     }

    **另外 如果你使用StatusBar控件     可以直接对  StatusBar的实例对象  的Text 属性赋值          结果会显示在状态栏上

    • 已编辑 用心 2010年5月12日 5:21 加入其它方法
    • 已标记为答案 Quorra 2010年5月12日 7:32
    2010年5月12日 5:17
  • 类库:

    namespace CompareDAL
    {
        public class TableManager
        {
            #region 列出一个数据库中所有的表名
            public ArrayList ListAllTablesNames(Database DB)
            {
                ArrayList ArLst = new ArrayList();
                for (int TbCount = 0; TbCount < DB.Tables.Count; TbCount++)
                {
                    ArLst.Add(DB.Tables[TbCount].Name.ToString());
                }
                return ArLst;
            } 
            #endregion
         }
    }
    窗体:
    namespace CompareDB
    {
        public partial class CompareDatabase : Form
        {
           TableManager TbMg = new TableManager();
           TargetAryLst = TbMg.ListAllTablesNames(TargetDB);
            //因为当数据库中表多的时候,在执行上面的方法的时候会比较缓慢,窗体会出现“未响应”,所以想要在窗体上实时显示类似“正在扫描<表名>......”
              不知道该怎么实现
        }
    }

    2010年5月12日 5:31
  • 你的意思是说要让ListAllTablesNames()方法执行的时候 表单不卡?

    你可以开启另外一个独立的线程 并将该方法作为线程入口 并start这个新的线程

    使用 .net 自带的BackgroundWorker控件 并将方法赋值给控件的对象 类似于开启新线程

    这个控件默认自带了异步响应回调。

    2010年5月12日 6:14
  • 自己解决了,谢谢!

    2010年5月12日 6:29