none
C#物件參照與方法使用的問題 RRS feed

  • 問題

  • 大家好

    我在 Form.cs下建立一個 buttom 並且額外建立一個 flash class是用來做閃光燈效果的

    我在 Form1.cs下面加入這行

            flash flash_instance = new flash();

    並且在button1的程式碼加入

           flash_instance.parameter(10);

     

    另外我的 flash.cs 的code如下:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;

    namespace test
    {
        public  class flash
        {
            public  void parameter(int waiting_time)
            {

                while (Visible)
                {
                    for (int c = 0; c <= 255 && Visible; c++)
                    {
                        this.BackColor = Color.FromArgb(c, 255 - c, c); // (R,G,B)
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(waiting_time);
                    }
                    for (int c = 255; c >= 0 && Visible; c--)
                    {
                        this.BackColor = Color.FromArgb(c, 255 - c, c); // (R,G,B)
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(waiting_time);
                    }
                }

            }
        }
    }

    但是出了幾個錯誤

    1.Visible不存在於目前內容中
    2.testflash不存在於目前內容中

    請問大家要如何修改呢?

    謝謝

    2010年11月4日 上午 01:53

解答

  •         test.flash flash_instance = new test.flash();
            private void button1_Click(object sender, EventArgs e)
            {
                //flash_instance.parameter(10);
                flash_instance.parameter(10 ,button1 );
            }
            private void button2_Click(object sender, EventArgs e)
            {
                flash_instance.RequestStop () ;
    
            }
    namespace test
    {
        public class flash
        {
            public void parameter(int waiting_time,Control ctrl)
            {
                while (!Visible)
                {
                    for (int c = 0; c <= 255 && !Visible; c++)
                    {
                        ctrl.BackColor = Color.FromArgb(c, 255 - c, c); // (R,G,B)
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(waiting_time);                    
                    }
                    for (int c = 255; c >= 0 && !Visible; c--)
                    {
                        ctrl.BackColor = Color.FromArgb(c, 255 - c, c); // (R,G,B)
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(waiting_time);                    
                    }                
                }
            }
            public void RequestStop()
            {
                Visible = true;
            }
            private volatile bool Visible;
        }
    }
    
    How to: Create and Terminate Threads (C# Programming Guide)
    2010年11月4日 上午 03:33

所有回覆

  • Hi!

    你有宣告 Visible 跟 testflash 嗎? 在您提供的程式碼都沒有看到


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年11月4日 上午 02:08
    版主
  • test 是我的 namespace

    flash是我宣告的 class

    事實上這個程式碼不要另外寫一個class 用傳引數的方式

    直接放在 click button 下面就可以用的

    請問小歐兄 : 這個Visible表示當前視窗是否有開者, 有的話為true, 照書上寫的應該是不用事前宣告才是, 至於 test.flash 不是變數需要宣告嗎? 我也不太懂, 謝謝你的回答

     

    2010年11月4日 上午 02:25
  •         test.flash flash_instance = new test.flash();
            private void button1_Click(object sender, EventArgs e)
            {
                //flash_instance.parameter(10);
                flash_instance.parameter(10 ,button1 );
            }
            private void button2_Click(object sender, EventArgs e)
            {
                flash_instance.RequestStop () ;
    
            }
    namespace test
    {
        public class flash
        {
            public void parameter(int waiting_time,Control ctrl)
            {
                while (!Visible)
                {
                    for (int c = 0; c <= 255 && !Visible; c++)
                    {
                        ctrl.BackColor = Color.FromArgb(c, 255 - c, c); // (R,G,B)
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(waiting_time);                    
                    }
                    for (int c = 255; c >= 0 && !Visible; c--)
                    {
                        ctrl.BackColor = Color.FromArgb(c, 255 - c, c); // (R,G,B)
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(waiting_time);                    
                    }                
                }
            }
            public void RequestStop()
            {
                Visible = true;
            }
            private volatile bool Visible;
        }
    }
    
    How to: Create and Terminate Threads (C# Programming Guide)
    2010年11月4日 上午 03:33
  • 謝謝你提供的code

    可以請問ㄧ下  原本我那樣寫會被系統判斷成錯誤是少了什麼嗎?

     

    2010年11月4日 上午 03:38
  • while
     (Visible)

    Visible 是存取物件flash裡面的Visible、而不是呼叫它的Button或Form的。

    你可以看到網友Joe Hung的Code最後面,有宣告一個bool Visible。
    其實這屬性比較像Enabled...不過這不是重點。

     

    2010年11月4日 上午 07:12
  • 喔喔  原來如此  謝謝你喔
    2010年11月4日 上午 07:40