none
請問一觀念問題 RRS feed

  • 問題

  • Visual Studio 2005 C#

    請問各位大大~

    我寫了一個類別 myglobal.cs,將所有方法寫在裡面,供FORM使用,裡面有一方法如下

            public static bool Status(Form f1,string tmp)
            {
                bool activeValue = false;
                try
                {
                    frm_FrameMenu mf = (frm_FrameMenu)(f1.MdiParent);
                    mf.toolStripStatusLabel1.Text = tmp;
                    activeValue = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "發生錯誤");
                }
                return activeValue;
            }


    因為有子母視窗的問題,所以我必須將FORM也傳過去,然後下指令呼叫

                    N0101 = new frm_N0101();
                    // 將它變成這個 MDI 表單的子表單,然後才顯示。
                    N0101.MdiParent = this;
                    N0101.WindowState = FormWindowState.Maximized;
                    N0101.Text = "資料維護";
                    N0101.Show();
    
                    myglobal.Status(this, "待命中...");

    編譯不會出現問題,但是當我將 VisualStudio2005的FORM[N0101]重新開啟(設計工具的畫面關閉或是重新開啟)時,都會出現下面的錯誤

    並未將物件參考設定為物件的執行個體

    請問

    1. 為何會出現這錯誤訊息??

    2. myglobal.Status(this, "待命中...");  << this 這樣用在觀念上有錯嗎??


    IDS

    2012年3月15日 上午 05:49

解答

  • 如果是(也應該) frm_FrameMenu  
    除非有其它考量
    根本不需要多此一舉 去 call myGlobal.Status
    直接 toolStripStatusLabel1.Text  = "待命中"; 就好了吧




    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 kentsl 2012年5月2日 上午 03:01
    2012年3月15日 上午 07:57

所有回覆

  • 你的第二段程式是寫在 MDI Parent 上嗎 ?

    如果是, 它應該不會上面還有 MDI Parent吧 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年3月15日 上午 06:15
    版主
  • 建議你看一下這個

    http://msdn.microsoft.com/zh-tw/library/aa983667(v=vs.71).aspx

    你需要最少兩張Form. 你可否把Error畫面post上來看看


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    MVP for VB.NET since 2003


    2012年3月15日 上午 06:51
  • 看您程式的第2段中,是mdiform,所以傳進去的this就是MDIform,
    所以 Status接到的f1參數的MdiParent它的值就是null,
    執行到frm_FrameMenu mf = (frm_FrameMenu)(f1.MdiParent); 這行,就掛了吧!

    myglobal.Status(this, "待命中...");
    改成
    myglobal.Status(N0101, "待命中...");

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年3月15日 上午 06:58
  • Dear Bill~

                child = new frm_N0101();
                child.MdiParent = this;
                child.WindowState = FormWindowState.Maximized;
                child.Text = "資料維護";
                child.Show();
    
                myglobal.Status(this, "待命中...");

    很抱歉,我不懂您的意思! 


    IDS

    2012年3月15日 上午 07:03
  • 我想先問你, 你原來想用 this 代表誰 ?

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年3月15日 上午 07:07
    版主
  • 架構如下:

    frm_FrameMenu.cs (Parent)

    frm_N0101.cs (child)

    myglobal.cs (全域變數的類別)


    IDS

    2012年3月15日 上午 07:09
  •             child = new frm_N0101();
                child.MdiParent = this;
                child.WindowState = FormWindowState.Maximized;
                child.Text = "資料維護";
                child.Show();

                myglobal.Status(this, "待命中...");

    以上這段程式你寫在哪一個類別?

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年3月15日 上午 07:28
    版主
  • 你要把mf改為 global variable,再改N0101.MdiParent = mf;

    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    MVP for VB.NET since 2003

    2012年3月15日 上午 07:29
  • Dear Bill~ 一切都是為了抓到 frm_FrameMenu 的 toolStripStatusLabel1

                    frm_FrameMenu mf = (frm_FrameMenu)(f1.MdiParent);

    mf.toolStripStatusLabel1.Text = tmp; 

    所以我需要從child的MDI Parent再去找到 frm_FrameMenu 的 toolStripStatusLabel1

    不過我就是覺得這樣很怪!! 有繞圈圈的感覺,所以我覺得我的做法有問題!!



    IDS

    2012年3月15日 上午 07:33
  •             child = new frm_N0101();
                child.MdiParent = this;
                child.WindowState = FormWindowState.Maximized;
                child.Text = "資料維護";
                child.Show();

                myglobal.Status(this, "待命中...");你講的半天, 不如直接告訴我, 那段程式碼的 最上面的 public class 後面接的是哪幾個字母. 這樣就好了.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年3月15日 上午 07:52
    版主
  • 您好,
    如果說依Ken說的把您的mdiForm傳進myglobal這個物件之中,假設屬性叫MainForm
    然後如果其他form需要用到mdiForm的物件時,就直接從MainForm這個屬性取得,
    不知這樣您是否能接受呢? Thanks.

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年3月15日 上午 07:55
  • 如果是(也應該) frm_FrameMenu  
    除非有其它考量
    根本不需要多此一舉 去 call myGlobal.Status
    直接 toolStripStatusLabel1.Text  = "待命中"; 就好了吧




    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 kentsl 2012年5月2日 上午 03:01
    2012年3月15日 上午 07:57
  • 這問題已經獲得解決了嗎?

    如果已獲得解決請標示解答

    若還沒請提出遭遇的問題 

    不要忽視你的問題


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年5月1日 下午 07:11