none
c#建置發布問題 RRS feed

解答

  • Hi,

    用以下程式,並把Form起始設為最大化就會發生了

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
     public partial class Form1 : Form
     {
      WebBrowser wb;
      public Form1()
      {
       InitializeComponent();  
      }
    
      private void Form1_Resize(object sender, EventArgs e)
      {
       wb.Size = this.Size;
      }
    
      private void Form1_Load(object sender, EventArgs e)
      {
       wb = new WebBrowser();
       wb.Parent = this;
       wb.Show();
      }
     }
    }

    如果是這樣的概念,讓物件在ReSize之前建立實體就可以了


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年5月11日 上午 10:47

所有回覆

  • 說了這麼多,真正大家需要的東西你卻只用 "報錯" 兩個字帶過去,是要大家通靈嗎?
    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年5月10日 下午 02:08
    版主
  • 小朱您好:

    我只是寫個小程式練習但對方一點執行開始時就只出現  "application發生問題,必須關閉,謹此致歉"

    就關閉了,我也不懂為什麼好好的東西自己測了對方都開不了。

    那再請教一個問題用2.0跟3.5編譯後的il程式碼是不是差不多?因為他們的clr版本都是2.0?

    2010年5月10日 下午 02:16
  • 程式內容有些什麼 ? 是否有用 Try Catch 去找出發生問題時的錯誤訊息 ?
    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年5月10日 下午 02:59
    版主
  • 最終請對方把裡面的資料抄出來應該是較完整的訊息了。
    錯誤簽名
    EventType:clr20r3
    P1:app.exe
    P2:1.0.0.0
    P3:4be6c539
    P4:app
    P5:1.0.0.0
    P6:4be6c539
    P7:13
    P8:25
    P9:system.nullreferenceexception

    我裡面是有用類似下面的lambda寫法,他不支援?
    chk_fast.CheckedChanged += (o, s) => { tb.Enabled = !chk_fast.Checked; };
    btn1.Click += (o, s) => { goodFrom.Hide(); Go(); };

    但我本機都能執行加編譯完成了或是那個環節出錯???

    2010年5月10日 下午 03:01
  • 寫了一個擴充webbrowser的類別
    sealed partial class myWebbrowser : WebBrowser, IWeb<string>

    在程式開啟的時候在Form1_Load事件new 一個myWebbrowser實例放到form裡
    寫上myWeb.DocumentCompleted += (o, s) => busyFlag = false;
    再來載入mdb裡面的資料到form裡的DataGridView之後就沒了。

    以上大致是開始時候做的事情。

    2010年5月10日 下午 03:16
  • 訊息中有 System.NullReferenceException,表示起始時有某個物件是 NULL。
    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年5月10日 下午 04:04
    版主
  • //最終是找到錯誤源了,是系統自己生成的InitializeComponent()方法裡面出錯;
    public Form1()
    {
        try
        {
            InitializeComponent();
        }
        catch (Exception x)
        {
            MessageBox.Show(x.ToString());
            File.WriteAllText(Application.StartupPath +"\\err.txt",x.ToString());
        }
    }
    //下面是輸出的錯誤訊息
    System.NullReferenceException: Object reference not set to an instance of an object.
       at InterNetWeb.Form1.Form1_Resize(Object sender, EventArgs e)
       at System.Windows.Forms.Control.OnResize(EventArgs e)
       at System.Windows.Forms.Form.OnResize(EventArgs e)
       at System.Windows.Forms.Control.OnSizeChanged(EventArgs e)
       at System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
       at System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height)
       at System.Windows.Forms.Control.SetBoundsCore(Int32 x, Int32 y, Int32 width, Int32 height, BoundsSpecified specified)
       at System.Windows.Forms.Form.SetBoundsCore(Int32 x, Int32 y, Int32 width, Int32 height, BoundsSpecified specified)
       at System.Windows.Forms.Control.ScaleControl(SizeF factor, BoundsSpecified specified)
       at System.Windows.Forms.ScrollableControl.ScaleControl(SizeF factor, BoundsSpecified specified)
       at System.Windows.Forms.Form.ScaleControl(SizeF factor, BoundsSpecified specified)
       at System.Windows.Forms.Control.ScaleControl(SizeF includedFactor, SizeF excludedFactor, Control requestingControl)
       at System.Windows.Forms.ContainerControl.Scale(SizeF includedFactor, SizeF excludedFactor, Control requestingControl)
       at System.Windows.Forms.ContainerControl.PerformAutoScale(Boolean includedBounds, Boolean excludedBounds)
       at System.Windows.Forms.ContainerControl.PerformNeededAutoScaleOnLayout()
       at System.Windows.Forms.ContainerControl.OnLayoutResuming(Boolean performLayout)
       at System.Windows.Forms.Control.ResumeLayout(Boolean performLayout)
       at InterNetWeb.Form1.InitializeComponent()
       at InterNetWeb.Form1..ctor()

    我並沒有去動過InitializeComponent(),試著想在裡面再包幾個try找出較準確的錯誤位置,但裡面回報此方法裡面不能使用try語句。
    最終我是用了
    public Form1()
    {
        try
        {
            InitializeComponent();
        }
        catch (Exception x)
        {
        }
    }
    強制執行沒再報錯,只是有些控制項大小有點走樣,但功能都還可以使用。

    請教該如何解讀
       at InterNetWeb.Form1.InitializeComponent()
       at InterNetWeb.Form1..ctor()
    是否是說InitializeComponent()執行完畢了,在呼叫他的base建構函數時候發生的錯誤?或是相反?或是?
    更讓我覺的怪的是我的電腦完全不受影響一直以來都能執行,連同換上別的hd開w7也能執行。

    2010年5月11日 上午 05:53
  • 這要檢查Designer檔才知道, 依照錯誤訊息來看是在Form的Size變更的時候產生NullRefrence, 因為沒發生過這種問題, 我試了更改幾個設定也沒法模擬出這樣的問題.
    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年5月11日 上午 10:34
    版主
  • Hi,

    用以下程式,並把Form起始設為最大化就會發生了

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
     public partial class Form1 : Form
     {
      WebBrowser wb;
      public Form1()
      {
       InitializeComponent();  
      }
    
      private void Form1_Resize(object sender, EventArgs e)
      {
       wb.Size = this.Size;
      }
    
      private void Form1_Load(object sender, EventArgs e)
      {
       wb = new WebBrowser();
       wb.Parent = this;
       wb.Show();
      }
     }
    }

    如果是這樣的概念,讓物件在ReSize之前建立實體就可以了


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年5月11日 上午 10:47
  • //原始寫法(應該也是沒問題才對的)
    myWebbrowser myWeb;
    private void Form1_Load(object sender, EventArgs e)
    {
        myWeb = new myWebbrowser();
        this.Controls.Add(myWeb);
        ...................
    }
    private void Form1_Resize(object sender, EventArgs e)
    {
    dgv1.Height = this.Height - 400;
    myWeb.Width = this.Width - 300;
    myWeb.Height = this.Height;
    }

    //最後改此寫法就不再報錯了
    myWebbrowser myWeb= new myWebbrowser();
    private void Form1_Load(object sender, EventArgs e)
    {
        this.Controls.Add(myWeb);
        ...................
    }
    private void Form1_Resize(object sender, EventArgs e)
    {
        dgv1.Height = this.Height - 400;
        myWeb.Width = this.Width - 300;
        myWeb.Height = this.Height;
    }

    //綜合以上我的電腦在情況1,2都沒發生問題,但別人的電腦就需要改成第2個寫法(想不透)

    查了幾天仍找不出原因,感謝蹂躪大大幫我解決此怪異的問題感謝感謝~~

    2010年5月11日 下午 01:11
  • 已標示為解答小朱<abbr class="affil">MVP</abbr><abbr class="affil">, 版主</abbr>18 分鐘前

    原來被小朱版主標示為解答難怪一直點報錯。

    2010年5月11日 下午 01:13
  • 這兩個寫法差很多, 如果你在Form_Load才產生 myWebbrowser的執行個體myWeb, 那在InitializeComponent()中設定Form Size的時候就會引發Form 的Resize事件.

    然後你的Resize委派函式中又做了

    myWeb.Width = this.Width - 300;
    myWeb.Height = this.Height;

    此時的myWeb執行個體根本沒產生, 會出現NullRefrence是應該的.

     

     


    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年5月11日 下午 01:19
    版主
  • Bill Chung大大您好:

    this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);//1
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(1024, 649);//2
    this.Name = "Form1";
    this.Text = "Test beta";
    this.Load += new System.EventHandler(this.Form1_Load);
    this.Resize += new System.EventHandler(this.Form1_Resize);//3
    this.ResumeLayout(false);//4
    this.PerformLayout();//5

    以上是我看程式產生的順序,您是指1~5那部份先觸發了Resize事件呢?

    我一直以為load的順序一定會比Resize來的早,或是不一定?或相反呢?

    或許是我的思考盲點,編譯後的檔案執行時他會先產生Resize事件,因我用f8 debug都未跑出Resize事件,所以覺的怪。

    2010年5月11日 下午 02:35
  • Hi,

    如果您的電腦不會發生

    可以設個斷點看看為何運作會正常

    我電腦的執行順序是

    建構子=>ReSize=>Load

     

    另外一提

    您會在Resize事件撰寫縮放程式

    看起來是要讓控制項隨著縮放

    可考慮在建立出控制項並設好位置與大小後

    設定Anchor屬性來達到相同的效果

    Control.Anchor Property

    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.anchor.aspx


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年5月11日 下午 02:37
  • 看起來很像是照你理解的順序發生的對不對 ?

    看一下這兩個方法

    [Control. SuspendLayout 方法 ]

    [Control. ResumeLayout 方法 ]

    原因在於它是在前方有SuspendLayout, 執行到this.ResumeLayout(false);才真的開始做配置, 於是就變成了先 this.Resize += new System.EventHandler(this.Form1_Resize);

    所以配置大小就會引發這個事件.

     


    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年5月11日 下午 02:59
    版主
  • 感謝各位的參與:
    再次感謝蹂躪大大提供的意見小弟下次有機會會來試試看

    謝謝Bill Chung大大的連結我等會去看看。

    2010年5月11日 下午 03:12