none
コードの誤りがどこにあるのか分かりません RRS feed

  • 質問

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace SimpleBrowser
    {
        static class Program
        {
            /// <summary>
            /// アプリケーションのメイン エントリ ポイントです。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new BrowserWindow());
            }
        }
    }

    上記スクリプトの「Application.Run(new BrowserWindow());」部分でCS0118エラーが発生します。

    下に、フォームに使用しているスクリプトも記述します。

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

    namespace Simple_Browser_Prototype
    {
        public partial class BrowserWindow : Form
        {
            public BrowserWindow()
            {
                InitializeComponent();
            }

            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {

            }

            private void button1_Click(object sender, EventArgs e)
            {
              if (webBrowser1.CanGoBack == true)
                {
                    webBrowser1.GoBack();
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                if (webBrowser1.CanGoForward == true)
                {
                    webBrowser1.GoForward();
                }
            }
        }
    }

    私は、このスクリプトのどこにエラーの原因があるのかが分かりません。

    教えていただけたら幸いです。

    2016年11月12日 2:26

回答

  • class ProgramのネームスペースはSimpleBrowserに所属しています。
    class BrowserWindowのネームスペースはSimple_Browser_Prototypeに所属しています。
    異なるネームスペースに所属している場合は直接は参照できません。逆に、完全に同一のネームスペースか、内側のネームスペースから外側のネームスペースへは参照できます。
    (同じクラス名をつけてあってもネームスペースが異なれば別のクラスとなるため、想定外のクラス名の重複等によるエラーが起こらないようになります)

    修正するには、コードの先頭にあるusingによって指定したネームスペース内のクラス等を参照することができるようになります。
    (usingによる参照は記述したファイル内でのみ有効です)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Simple_Browser_Prototype;//このファイルでは指定したネームスペースを参照できるようにする。
    namespace SimpleBrowser
    {
        static class Program
        {
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new BrowserWindow()); //usingで参照しているのでネームスペースを自動解決してもらえます。
            }
        }
    }
    あるいはクラス名にネームスペース名を付加することで参照することができるようになります。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace SimpleBrowser
    {
        static class Program
        {
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Simple_Browser_Prototype.BrowserWindow()); //ネームスペースを付加することで参照します
            }
        }
    }


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2016年11月12日 4:16
    • 回答としてマーク 星 睦美 2016年11月22日 1:00
    2016年11月12日 4:13
  • 理由についてはすでに指摘があるので、解決方法の一つとしての紹介です。

    エラーになっている BrowserWindow の部分にカーソルを合わせると using を追加するか、名前空間をつけたクラス名にするかを選ぶ機能があります。

    キーボードでこのメニューを出したい場合は、その位置にカーソルを合わせた上で、Shift + Alt + F10 を押してください。

    2016年11月12日 6:31
    モデレータ

すべての返信

  • class ProgramのネームスペースはSimpleBrowserに所属しています。
    class BrowserWindowのネームスペースはSimple_Browser_Prototypeに所属しています。
    異なるネームスペースに所属している場合は直接は参照できません。逆に、完全に同一のネームスペースか、内側のネームスペースから外側のネームスペースへは参照できます。
    (同じクラス名をつけてあってもネームスペースが異なれば別のクラスとなるため、想定外のクラス名の重複等によるエラーが起こらないようになります)

    修正するには、コードの先頭にあるusingによって指定したネームスペース内のクラス等を参照することができるようになります。
    (usingによる参照は記述したファイル内でのみ有効です)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Simple_Browser_Prototype;//このファイルでは指定したネームスペースを参照できるようにする。
    namespace SimpleBrowser
    {
        static class Program
        {
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new BrowserWindow()); //usingで参照しているのでネームスペースを自動解決してもらえます。
            }
        }
    }
    あるいはクラス名にネームスペース名を付加することで参照することができるようになります。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace SimpleBrowser
    {
        static class Program
        {
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Simple_Browser_Prototype.BrowserWindow()); //ネームスペースを付加することで参照します
            }
        }
    }


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2016年11月12日 4:16
    • 回答としてマーク 星 睦美 2016年11月22日 1:00
    2016年11月12日 4:13
  • 理由についてはすでに指摘があるので、解決方法の一つとしての紹介です。

    エラーになっている BrowserWindow の部分にカーソルを合わせると using を追加するか、名前空間をつけたクラス名にするかを選ぶ機能があります。

    キーボードでこのメニューを出したい場合は、その位置にカーソルを合わせた上で、Shift + Alt + F10 を押してください。

    2016年11月12日 6:31
    モデレータ
  • 解決しました!

    ありがとうございました!!

    2016年11月15日 8:06