none
C# BUTTON 一問 RRS feed

  • 問題

  • 本人想做到 按下BUTTON 時 保持下陷的樣子 同時開起一個新的From2
    當在按一次BUTTON 就彈起并關了From2
    請問怎樣才能做到這個效果 個位前輩幫幫忙
    多謝!
    2008年4月17日 下午 01:35

解答

  • 你可以在new Form2的時候將Form1的instance傳入, 然後當Form2 close的時候, 呼叫Form1的函式, 設定Form1中的Button1.

    至於要將Form2 Hide()或Close(), 我想是都可以, 看你的應用來決定.

    請參考我的測試程式(因為只是測試,所以沒有寫的很好, 意思到就好):

    public partial class Form1 : Form
        {
            Form2 f2;
            public Form1()
            {
                InitializeComponent();
            }

            public void PopupButton1()
            {
                this.button1.FlatStyle = FlatStyle.Standard;
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (this.button1.FlatStyle == FlatStyle.Flat)
                {
                    this.button1.FlatStyle = FlatStyle.Standard;
                    if (f2 != null)
                    {
                        f2.Hide();
                    }
                }
                else
                {
                    this.button1.FlatStyle = FlatStyle.Flat;

                    if (f2 == null || f2.IsDisposed)
                    {

                        //如果Form2是null或close,重新new一個Form2
                        f2 = new Form2(this);
                    }
                    f2.Show();
                }
            }
        }

     

    public partial class Form2 : Form
        {
            Form1 f1;
            public Form2(Form1 f)
            {
                InitializeComponent();

                //設定Form1的instance
                this.f1 = f;
            }

            //Form2 close時,呼叫Form1更改Button1的狀態

            private void Form2_FormClosed(object sender, FormClosedEventArgs e)
            {
                this.f1.PopupButton1();
            }
        }

    2008年4月19日 上午 09:55

所有回覆

  • 可以使用 CheckBox 來取代 Button,然後更改 CheckBox 的 Appearance 屬性設定為 Button

    然後參考下列程式碼

     

    private Form2 f2;
    private void checkBox2_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox cb = (CheckBox) sender;
        if(cb.Checked)
        {
            f2 = new Form2();
            f2.Show();
        }
        else
        {
            f2.Close();
        }
    }

     

    2008年4月17日 下午 03:12
  • 另一種想法, 改變Button的FlatStyle.

    ex:

    private void button1_Click(object sender, EventArgs e)
    {
        if (this.button1.FlatStyle == FlatStyle.Flat)
            this.button1.FlatStyle = FlatStyle.Standard;
        else
            this.button1.FlatStyle = FlatStyle.Flat;
    }

    2008年4月18日 上午 02:09
  • 多謝前輩
    但 我試過 好像只可以開From2出來 在按 關不了
    yilin 大大的方法我也試了 出玩同樣問題
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                if (this.button1.FlatStyle == FlatStyle.Flat)
                {
                    this.button1.FlatStyle = FlatStyle.Standard;
                    f2.Close();
                }
                else
                {
                    this.button1.FlatStyle = FlatStyle.Flat;
                    f2.Show();
                }
            }
    不知道哪錯了?
    2008年4月18日 上午 09:03
  • f2.Close();改成f2.Hide();試試

    如果還不行,可能你要再把完整一點的程式碼放上來,讓大家判斷一下.

    2008年4月18日 上午 10:35
  • 還是不行的說
    程式碼就和你的一樣呀 我沒做什麼
    只是兩個 from 1&2
    from1 有一個button1 而已
    2008年4月18日 上午 10:50
  • 以下是我的Code, 差別在於你在click那邊產生Form2, 而我是在最外面就宣告了一個Form2.

    public partial class Form1 : Form
        {
            Form2 f2;
            public Form1()
            {
                InitializeComponent();
                f2 = new Form2();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (this.button1.FlatStyle == FlatStyle.Flat)
                {
                    this.button1.FlatStyle = FlatStyle.Standard;
                    f2.Hide();
                }
                else
                {
                    this.button1.FlatStyle = FlatStyle.Flat;
                    f2.Show();
                }
            }
        }

    2008年4月18日 下午 01:49
  • 原來來這樣
    多謝前輩

    但又有新的問題出現
    就是如果我 用 X 關了 From2  或是 在From2用一個 BUTTON 來 EXIT FROM2
    這時 FROM1的 BUTTON 不會彈起 而且在按就會出
    ERROR : Cannot access a disposed object.
           Object name: 'Add_New_LandLord'.
    2008年4月19日 上午 03:02
  • 以下是所想到的部分,僅供參考:

    在關閉Form2前,在Form2的關閉表單事件中,

    1.要先處理FROM1的 BUTTON彈起的動作,再進行Form2關閉。

    2.注意:若Form2不存在時,Button 要 Form2 NewFrm2 =new Form2();

     

     

     

    2008年4月19日 上午 08:16
  • 你可以在new Form2的時候將Form1的instance傳入, 然後當Form2 close的時候, 呼叫Form1的函式, 設定Form1中的Button1.

    至於要將Form2 Hide()或Close(), 我想是都可以, 看你的應用來決定.

    請參考我的測試程式(因為只是測試,所以沒有寫的很好, 意思到就好):

    public partial class Form1 : Form
        {
            Form2 f2;
            public Form1()
            {
                InitializeComponent();
            }

            public void PopupButton1()
            {
                this.button1.FlatStyle = FlatStyle.Standard;
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (this.button1.FlatStyle == FlatStyle.Flat)
                {
                    this.button1.FlatStyle = FlatStyle.Standard;
                    if (f2 != null)
                    {
                        f2.Hide();
                    }
                }
                else
                {
                    this.button1.FlatStyle = FlatStyle.Flat;

                    if (f2 == null || f2.IsDisposed)
                    {

                        //如果Form2是null或close,重新new一個Form2
                        f2 = new Form2(this);
                    }
                    f2.Show();
                }
            }
        }

     

    public partial class Form2 : Form
        {
            Form1 f1;
            public Form2(Form1 f)
            {
                InitializeComponent();

                //設定Form1的instance
                this.f1 = f;
            }

            //Form2 close時,呼叫Form1更改Button1的狀態

            private void Form2_FormClosed(object sender, FormClosedEventArgs e)
            {
                this.f1.PopupButton1();
            }
        }

    2008年4月19日 上午 09:55
  • 問題題終於解決了 多謝個位前輩指教
    2008年4月20日 上午 09:41