none
一直出現偵測連線 RRS feed

  • 問題

  • private void iButton7_Click(object sender, EventArgs e)
            {
                string hostName = Dns.GetHostName();

                IPHostEntry host = Dns.GetHostEntry(hostName);

                string addr = host.AddressList[0].ToString();

                // 檢查連線狀態
                bool connectivity = (addr != IPAddress.Parse("127.0.0.1").ToString());
                if (connectivity == true)
                {
                    iWebBrowser1.Visible = true;
                }
                else
                    MessageBox.Show("無法連線");
            }

    有一段如以上的程式碼,這是位於Form1,但Form1的一些變數有傳到Form2所以Form2裡有

    internal Form1 f1 = new Form1();

    所以Form2又會再出現一次偵測的畫面,但Form2在程式中,並不需要偵測,請問該如何解決這個問題呢?

    2007年10月8日 上午 06:35

解答

  •  

    因為 WebBrowser 控制項...再載入的時候就會自動連線到你的 url 所以才會出現偵測網路的動作...

     

    你把 iWebBrowser1.Url 設定為 about:blank 試試看

    2007年10月27日 上午 07:28
  • 如上所述,.Url觸發連線要求
    亦可在設計檢視中把iWebBrowser1.Url屬性清空..
    2007年10月27日 下午 02:44

所有回覆

  • 你是在Form1 的 Form_Load 的時候就有呼叫 iButton7_Click 來做連線檢查嗎??

    如果是的話,你重開 new From1 就變成無可避免要呼叫它!!!

     

    你要讓 Form1 的變數傳給 Form2,你可以直接把 Form1 物件變數,

    指定到 Form2 中的 Form1 物件變數中來直接使用也可以。

     

     

    2007年10月8日 下午 01:10
  • 你是在Form1 的 Form_Load 的時候就有呼叫 iButton7_Click 來做連線檢查嗎??

    =>不是在Form_Load 的時候,而是在按下iButton7這個button的時候

    但我雖然把它寫在iButton7裡,但未按iButton7時,在Form1_Load 的時就已經會先偵測了!

    還是因為偵測的這段程式碼的關係呢?不過一般來講,寫在某個元件裡的程式碼,不是應該觸發事件才會動嗎???

    但它卻自己先跑了…

     

    2007年10月9日 上午 03:59
  • 那你就先放在模擬器上面,設定中斷點觀察呼叫的順序,看看問題出在哪邊!

     

     

    2007年10月9日 上午 04:26
  • 嗯嗯,我設了中斷點去測試,的確在FormLoad時並不會執行到那段程式碼…

    但還是會出現偵測連線…

    2007年10月9日 上午 08:46
  • 你就利用偵錯模式...在偵測連線功能的程式碼前設定中斷點....

    然後打開【呼叫堆疊】的 Tab,看看那一行程式的呼叫堆疊....

    就可以看出函數呼叫的順序...

     

    不會使用的話,那你就在所有的函數進入點都設定中斷點,

    一步一步慢慢看,總會知道她是被誰呼叫出來執行的

     

     

    2007年10月9日 上午 09:00
  • 如果按下iButton7出現的呼叫堆疊是

    test.exe!test.i02.iButton7_Click(object sender = {Text = " 連線"}, System.EventArgs e = {System.EventArgs}) 行 261 C#               (i02是原本發問中的Form1)


    test.exe!test.i01.iMenuItem2_Click(object sender = {System.Windows.Forms.MenuItem}, System.EventArgs e = {System.EventArgs}) 行 68 + 0x6 位元組 C#    (i01在發問中未提及,假設它是Form0)

    test.exe!test.Program.Main() 行 15 + 0xa 位元組 C#

     

    那也就是說我在按下Form0連到Form1的「iMenuItem2」時,它就已經偵測連線嘍?但偵測連線的程式在Form1中…

    如果是的話,該如何解決呢????

     

    不好意思,怕會搞不清楚,所以重新解釋

    三個Form

    Form0(i01) =>iMenuItem2

    Form1(i02) =>iButton7

    Form2    

     

     

    2007年10月9日 上午 10:04
  • MenuItem2_Click的程式碼也貼上來吧

    你如何知道他開始「偵測連線」? 是依據你顯示的MessageBox,還是看到啥現象?
    2007年10月24日 上午 04:15
  • MenuItem2_Click的程式碼

    i02 f2 = new i02 ();
    f2.ShowDialog();
    this.Close();

     

    i02_Load時,在未按 iButton7時,程式就會顯示「無法以目前的連線設定,進行連線。要變更連線設定,請點選設定(這是這台PDA無法連線時,PDA會出現的提示,類似MessageBox)」,但我想要的是,使用者按下 iButton7時,如果是沒有連線的狀況,才顯示以下藍色的部份「無法連線」。

    private void iButton7_Click(object sender, EventArgs e)
            {
                string hostName = Dns.GetHostName();

                IPHostEntry host = Dns.GetHostEntry(hostName);

                string addr = host.AddressList[0].ToString();

                // 檢查連線狀態
                bool connectivity = (addr != IPAddress.Parse("127.0.0.1").ToString());
                if (connectivity == true)
                {
                    iWebBrowser1.Visible = true;
                }
                else
                    MessageBox.Show("無法連線");
            }

     

     

    2007年10月24日 下午 03:40
  • i02 Form_Load的程式碼?

    可能是裡面有啥東西觸發了連線的要求,
    以致於自動去做連結網路的動作

    你的問題跟iButton7_Click沒啥關係...
    2007年10月25日 下午 07:18
  • i02 Form_Load的程式碼?  

     

     private void i02_Load(object sender, EventArgs e)
            {
                iComboBox2.SelectedIndex = 0;
                iComboBox3.SelectedIndex = 0;
                port.SelectedIndex = 6;

                
                DirectoryInfo di = new DirectoryInfo(path1 + \\track);
                FileInfo[] fi = di.GetFiles();

                foreach (FileInfo fiTemp in fi)
                {
                    string a = "";
                    a = a + fiTemp;
                    string[] b = a.Split('_');
                    string c = b[0] + "_" + b[1];

                    int j = 0;
                    for (int i = 0; i < iComboBox1.Items.Count; i++)
                    {
                        if (c == iComboBox1.ItemsIdea.ToString())
                        {
                            break;
                        }
                        j = j + 1;
                    }

                    if (j == iComboBox1.Items.Count)
                    {
                        iComboBox1.Items.Add(c);
                    }
                }

     

    這是 i02_Load的內容…但完全沒有連線相關的程式碼…所以才不解…為什麼會偵測連線…

    偵測連線的內容…明明就在iButton7_Click裡…

    2007年10月26日 下午 12:05
  • 將i01_Load, i02_Load, iButton7_Click, iMenuItem2_Click的第一行都設定中斷點,然後執行

    進入中斷點之後逐步執行,看是在哪一行會觸發連線要求...

     

    還有port是啥物件啊?

    2007年10月26日 下午 03:23
  • 到i02.designer.cs裡的this.iTabPage2.Controls.Add(this.port)這一行,模擬器就會出現無法連線的MessageBox,

    這一行的呼叫堆疊如下:

     

    test.exe!test.i02.InitializeComponent() 行 134 C#
    test.exe!test.i02.i02() 行 23 C#
    test.exe!test.i01.iMenuItem2_Click(object sender = {System.Windows.Forms.MenuItem}, System.EventArgs e = {System.EventArgs}) 行 67 + 0x5 位元組 C#
    test.exe!test.Program.Main() 行 16 C#

     

    紅字部份的前四行如下

    this.iWebBrowser1.Location = new System.Drawing.Point(8, 28);
    this.iWebBrowser1.Name = "iWebBrowser1";
    this.iWebBrowser1.Size = new System.Drawing.Size(224, 213);
    this.iWebBrowser1.Url = new System.Uri(http://www.yahoo.com.tw);

     

    不知道跟這個有沒有關係,該如何解決呢???

     

    還有port是啥物件啊?

    =>是Combobox,讓使用者選擇要使用的連接埠,因為程式中需要用GPS定位!!!

     


      

    2007年10月27日 上午 06:25
  •  

    因為 WebBrowser 控制項...再載入的時候就會自動連線到你的 url 所以才會出現偵測網路的動作...

     

    你把 iWebBrowser1.Url 設定為 about:blank 試試看

    2007年10月27日 上午 07:28
  • 如上所述,.Url觸發連線要求
    亦可在設計檢視中把iWebBrowser1.Url屬性清空..
    2007年10月27日 下午 02:44
  • 問題已解決了!!!!非常感謝 Jan Yeh 及 chhuang 的幫助!!!!!^_^

    2007年10月28日 下午 01:50