要实现 Form1中用一个定时器每五分钟调用一次Form2对象传一个string参数,Form2中有一个lable,让它的Text为传过来的string的内容,并用Show方法显示。但是每次Show出来的效果希望是如果前面的Form2窗口如果没有被用户关闭则刷新lable.Text的内容,如果已经被用户关闭则重新弹出新的Form2窗口显示string内容。该怎么实现呢?大家帮帮忙。

解决方案 »

  1.   

    if(form2 != null)
    {
     form2.label.Text = "";
     form2.Refresh();
    }
    else
    {
     form2 = new form2();
      form2.label.Text = "";
     form2.Refresh();
    }
      

  2.   

    Form1中  设置个timer  
    定时器每五分钟向Form2传一个string参数
    Form2中用事件响应.
      

  3.   

    那这样楼主可能好理解些..
    在Form1中 设置一静态变量   public static string  m_username = "";
    也在Form1 中对其赋值 ...在Form2中 设置给timer 每5分钟 去获取一下  Form1.m_username ;楼主看看这样是不是好理解一些..
      

  4.   

    public partial class Form1 : Form
        {
            private Timer mtimer;
            Form2 mform2;
            public Form1()
            {
                InitializeComponent();            mtimer = new Timer();
                mtimer.Interval = 5* 1000;
                mtimer.Tick += new EventHandler(mtimer_Tick);
                mtimer.Enabled = false;
            }        void mtimer_Tick(object sender, EventArgs e)
            {
                if (mform2 == null)
                    mform2 = new Form2();            Random rd = new Random();
                mform2.ShowMessage(String.Format("Form1 Send:{0}",rd.Next().ToString()));
            }        private void button1_Click(object sender, EventArgs e)
            {
                if (mtimer.Enabled)
                    return;            if (mform2 == null)
                    mform2 = new Form2();
                mform2.Show();
                mform2.ShowMessage("Start");
                mtimer.Enabled = true;
            }        private void button2_Click(object sender, EventArgs e)
            {
                if (!mtimer.Enabled)
                    return;            mtimer.Enabled = false;
                mform2.Dispose();
                mform2 = null;
            }
        }
    public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        public void ShowMessage(string _strmsg)
            {
                label1.Text = _strmsg;
                this.Show();
                this.BringToFront();
                this.Update();
            }        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                this.Hide();
                e.Cancel = true;
            }
        }
      

  5.   

    Form f;
            //timer1的Enabled为true,Interval值我就不说了 
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (f == null)
                {
                    f = new Form2();
                    f.Show();
                }
                f.lable1.Text = DateTime.Now.ToLongTimeString();
                //lable1设为public的,后边的值相当于传过去的值
            }
      

  6.   

    简单点写,可以这样试下Form1中        private void Form1_Load(object sender, EventArgs e)
            {
                timer1.Start();
            }        Form2 f2 = null;        private void timer1_Tick(object sender, EventArgs e)
            {
                timer1.Interval = 300000;
                string fStr = textBox1.Text;
                if (f2 == null || f2.IsDisposed)
                {
                    f2 = new Form2();
                    f2.label1.Text = fStr;
                    f2.Show();
                }
                else
                {
                    f2.Activate();
                    f2.label1.Text = fStr;
                }
            } Form2中把label1声明为public的        public System.Windows.Forms.Label label1;