none
有十个按钮,每个按钮执行一种功能,能否让按钮依次自动执行 RRS feed

  • 问题

  • 我在窗口上放了十个按钮和textBox1,每个按钮执行后的功能都会显示在textBox1上,这样感觉好调试程序,十个按钮依次按完,功能全部达到,程序就结束了,我不想把十个按钮中的程序依次拷贝到一个按钮中,这样出错了难查找.能否编这样的程序:按下botton11后其中的程序会自动执行botton1--botton10中的程序.

    杲大胜 ...........勤!能!补!拙!........ 勤!勤!勤!.............
    2011年4月20日 11:21

答案

  • using System.Collections.Generic;
    using System.ComponentModel;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
          InitializeButtons(10);
        }
    
        void InitializeButtons(int count)
        {
          var buttons = new List<Button>();
    
          for (int i = 0; i < count; i++)
          {
            buttons.Add(new Button()
            {
              Text = string.Format("read {0}", i),
              Dock = DockStyle.Top
            });
          }
    
          foreach (Button b in buttons)
          {
            var nextIndex = buttons.IndexOf(b) + 1;
            Button nextButton = null;
    
            if (nextIndex < buttons.Count)
              nextButton = buttons[nextIndex];
    
            b.Click += (o, e) =>
            {
              var me = o as Button;
              me.Text = "Complete";
              me.Enabled = false;
    
              // 自己的事件执行完成调用下一个按键的占击方法
              using (BackgroundWorker bg = new BackgroundWorker())
              {
                // 延时执行,模拟演示
                bg.DoWork += (o1, e1) => { System.Threading.Thread.Sleep(500); };
                bg.RunWorkerCompleted += (o1, e1) =>
                {
                  if (nextButton != null && nextButton.Enabled)
                    nextButton.PerformClick();
                };
                bg.RunWorkerAsync();
              }
            };
    
            this.Controls.Add(b);
          }
        }
      }
    }
    

    知识改变命运,奋斗成就人生!
    • 已标记为答案 杲大盛 2011年4月20日 12:43
    2011年4月20日 11:47
    版主

全部回复

  • button11下绑定各botton的事件。
    胡超
    2011年4月20日 11:30
  • using System.Collections.Generic;
    using System.ComponentModel;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
          InitializeButtons(10);
        }
    
        void InitializeButtons(int count)
        {
          var buttons = new List<Button>();
    
          for (int i = 0; i < count; i++)
          {
            buttons.Add(new Button()
            {
              Text = string.Format("read {0}", i),
              Dock = DockStyle.Top
            });
          }
    
          foreach (Button b in buttons)
          {
            var nextIndex = buttons.IndexOf(b) + 1;
            Button nextButton = null;
    
            if (nextIndex < buttons.Count)
              nextButton = buttons[nextIndex];
    
            b.Click += (o, e) =>
            {
              var me = o as Button;
              me.Text = "Complete";
              me.Enabled = false;
    
              // 自己的事件执行完成调用下一个按键的占击方法
              using (BackgroundWorker bg = new BackgroundWorker())
              {
                // 延时执行,模拟演示
                bg.DoWork += (o1, e1) => { System.Threading.Thread.Sleep(500); };
                bg.RunWorkerCompleted += (o1, e1) =>
                {
                  if (nextButton != null && nextButton.Enabled)
                    nextButton.PerformClick();
                };
                bg.RunWorkerAsync();
              }
            };
    
            this.Controls.Add(b);
          }
        }
      }
    }
    

    知识改变命运,奋斗成就人生!
    • 已标记为答案 杲大盛 2011年4月20日 12:43
    2011年4月20日 11:47
    版主
  • private void button11_Click(object sender, EventArgs e)
        {
         
          button1_Click(sender, e);
          button2_Click(sender, e);
          button3_Click(sender, e);
          button4_Click(sender, e);
          button5_Click(sender, e);
          button6_Click(sender, e);
          button7_Click(sender, e);
          button8_Click(sender, e);
          button9_Click(sender, e);
          button10_Click(sender, e);
          
        }
    
    
    不太会用线程来实现!!请mvp出来吧
    Ellis_Wong
    2011年4月20日 12:39
  • 请问有些关于线程的资料吗!对这个有点模糊~
    Ellis_Wong
    2011年4月20日 12:43