質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • C#

    9029questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Windows Forms

    174questions

    Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

CS103:現在のコンテキスト内に存在しません。

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 12K+

C# を現在VisualStudio を使わずに書いています。
プロジェクトには以下のファイルがあります。

  • main.cs
  • Form1.cs ←どちらもクラス名は同じ
  • Form1D.cs ←どちらもクラス名は同じ
    Form1内でForm1Dにて記述したTextBoxのtextから値を拾おうとしたところ、Form1.csからはcomは現在のコンテキスト内に存在しません。と出てきてしまいます。("com"はFormD.cs内で記述したTextBoxのこと)VisualStudioでFormアプリケーションを作る時と同じように記述しているのに何故アクセスできないのでしょうか??
    お助け下さい!!
//main.cs 多分関係ない
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Windows.Forms;
using System.Drawing;
namespace IotSample
{
    static class main
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
//Form1.cs
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Windows.Forms;
using System.Drawing;
namespace IotSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void Open_Click(object sender, EventArgs e)
        {
                com.Text = "aaa"; //←ここでCS103

        }
    }
}
//Form1D.cs このコードは自分のソフトで生成したので汚いです。
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Windows.Forms;
using System.Drawing;
namespace IotSample
{
public partial class Form1 : Form
{
public void InitializeComponent(){
ClientSize = new Size(500,600);
this.Text = "Form2";
this.Load += new System.EventHandler(this.Form1_Load);
TextBox com = new TextBox();
com.Name = "com";
com.Location = new Point(62,23);
this.Controls.Add(com);


Label coml = new Label();
coml.Name = "coml";
coml.Location = new Point(25,27);
coml.Text = "COM";
this.Controls.Add(coml);
TextBox text = new TextBox();
text.Name = "text";
text.Location = new Point(18,90);
text.Size = new Size(200,200);
this.Controls.Add(text);


Button Open = new Button();
Open.Name = "Open";
Open.Location = new Point(177,22);
Open.Text = "Open";
Open.Click += new System.EventHandler(Open_Click);
this.Controls.Add(Open);
Button ledON = new Button();
ledON.Name = "ledON";
ledON.Location = new Point(27,56);
ledON.Text = "ledON";
this.Controls.Add(ledON);
Button ledOFF = new Button();
ledOFF.Name = "ledOFF";
ledOFF.Location = new Point(113,55);
ledOFF.Text = "ledOFF";
ledOFF.Click += new System.EventHandler(ledOFF_Click);
this.Controls.Add(ledOFF);
}
}
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

提示されたコードを拝見する限り、すべてのコンポーネントがInitializeComponentメソッドのみに存在している形になります。

解決方法としては、どちらかのファイルに各コンポーネントをローカル変数として存在させる必要があると思います。

一般的にこの辺はコードジェネレータサイドでしますから、そっちの方に追記するとすれば

//Form1D.cs このコードは自分のソフトで生成したので汚いです。
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Windows.Forms;
using System.Drawing;
namespace IotSample
{
    public partial class Form1 : Form
    {
        private TextBox com;
        private Label coml;
        private Button Open;
        private Button ledON;
        private Button ledOFF;

        public void InitializeComponent()
        {
            ClientSize = new Size(500, 600);
            this.Text = "Form2";
            this.Load += new System.EventHandler(this.Form1_Load);
            com = new TextBox();
            com.Name = "com";
            com.Location = new Point(62, 23);
            this.Controls.Add(com);


            coml = new Label();
            coml.Name = "coml";
            coml.Location = new Point(25, 27);
            coml.Text = "COM";
            this.Controls.Add(coml);
            TextBox text = new TextBox();
            text.Name = "text";
            text.Location = new Point(18, 90);
            text.Size = new Size(200, 200);
            this.Controls.Add(text);


            Open = new Button();
            Open.Name = "Open";
            Open.Location = new Point(177, 22);
            Open.Text = "Open";
            Open.Click += new System.EventHandler(Open_Click);
            this.Controls.Add(Open);
            ledON = new Button();
            ledON.Name = "ledON";
            ledON.Location = new Point(27, 56);
            ledON.Text = "ledON";
            this.Controls.Add(ledON);
            ledOFF = new Button();
            ledOFF.Name = "ledOFF";
            ledOFF.Location = new Point(113, 55);
            ledOFF.Text = "ledOFF";
            ledOFF.Click += new System.EventHandler(ledOFF_Click);
            this.Controls.Add(ledOFF);
        }
    }
}

こんな感じになるかと

ただ、VisualStudioのフォームデザイナを使う場合、齟齬が出可能性が非常に高いため、多少面倒でもVisalStudioでコード生成させてしまった方がこのようなトラブルも避けることができるかなと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

こんにちは。

comはInitializeComponent()関数内のローカル変数ですね。
ローカル変数は関数の外からアクセスできないですよ。
以下のように書いてみて下さい。

public partial class Form1 : Form
{
    TextBox com;
    public void InitializeComponent(){
    //(中略)
    com = new TextBox();
    //(後略)

しかし、インデントはつけましょう。
インデントのないプログラムって「クリープのないコーヒー」よりまずいです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

ローカル変数だからでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C#

    9029questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Windows Forms

    174questions

    Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。