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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

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

Windows Forms

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

Q&A

解決済

3回答

43420閲覧

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

Mogami_Tsuchika

総合スコア47

C#

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

Windows Forms

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

0グッド

0クリップ

投稿2017/05/27 08:27

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

  • main.cs
  • Form1.cs ←どちらもクラス名は同じ
  • Form1D.cs ←どちらもクラス名は同じ

Form1内でForm1Dにて記述したTextBoxのtextから値を拾おうとしたところ、Form1.csからはcomは現在のコンテキスト内に存在しません。と出てきてしまいます。("com"はFormD.cs内で記述したTextBoxのこと)VisualStudioでFormアプリケーションを作る時と同じように記述しているのに何故アクセスできないのでしょうか??
お助け下さい!!

C#

1//main.cs 多分関係ない 2using System; 3using System.CodeDom; 4using System.CodeDom.Compiler; 5using System.Reflection; 6using System.Windows.Forms; 7using System.Drawing; 8namespace IotSample 9{ 10 static class main 11 { 12 [STAThread] 13 static void Main() 14 { 15 Application.EnableVisualStyles(); 16 Application.SetCompatibleTextRenderingDefault(false); 17 Application.Run(new Form1()); 18 } 19 } 20}

C#

1//Form1.cs 2using System; 3using System.CodeDom; 4using System.CodeDom.Compiler; 5using System.Reflection; 6using System.Windows.Forms; 7using System.Drawing; 8namespace IotSample 9{ 10 public partial class Form1 : Form 11 { 12 public Form1() 13 { 14 InitializeComponent(); 15 } 16 private void Form1_Load(object sender, EventArgs e) 17 { 18 } 19 private void Open_Click(object sender, EventArgs e) 20 { 21 com.Text = "aaa"; //←ここでCS103 22 23 } 24 } 25}

C#

1//Form1D.cs このコードは自分のソフトで生成したので汚いです。 2using System; 3using System.CodeDom; 4using System.CodeDom.Compiler; 5using System.Reflection; 6using System.Windows.Forms; 7using System.Drawing; 8namespace IotSample 9{ 10public partial class Form1 : Form 11{ 12public void InitializeComponent(){ 13ClientSize = new Size(500,600); 14this.Text = "Form2"; 15this.Load += new System.EventHandler(this.Form1_Load); 16TextBox com = new TextBox(); 17com.Name = "com"; 18com.Location = new Point(62,23); 19this.Controls.Add(com); 20 21 22Label coml = new Label(); 23coml.Name = "coml"; 24coml.Location = new Point(25,27); 25coml.Text = "COM"; 26this.Controls.Add(coml); 27TextBox text = new TextBox(); 28text.Name = "text"; 29text.Location = new Point(18,90); 30text.Size = new Size(200,200); 31this.Controls.Add(text); 32 33 34Button Open = new Button(); 35Open.Name = "Open"; 36Open.Location = new Point(177,22); 37Open.Text = "Open"; 38Open.Click += new System.EventHandler(Open_Click); 39this.Controls.Add(Open); 40Button ledON = new Button(); 41ledON.Name = "ledON"; 42ledON.Location = new Point(27,56); 43ledON.Text = "ledON"; 44this.Controls.Add(ledON); 45Button ledOFF = new Button(); 46ledOFF.Name = "ledOFF"; 47ledOFF.Location = new Point(113,55); 48ledOFF.Text = "ledOFF"; 49ledOFF.Click += new System.EventHandler(ledOFF_Click); 50this.Controls.Add(ledOFF); 51} 52} 53} 54

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

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

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

cssharp

1 2//Form1D.cs このコードは自分のソフトで生成したので汚いです。 3using System; 4using System.CodeDom; 5using System.CodeDom.Compiler; 6using System.Reflection; 7using System.Windows.Forms; 8using System.Drawing; 9namespace IotSample 10{ 11 public partial class Form1 : Form 12 { 13 private TextBox com; 14 private Label coml; 15 private Button Open; 16 private Button ledON; 17 private Button ledOFF; 18 19 public void InitializeComponent() 20 { 21 ClientSize = new Size(500, 600); 22 this.Text = "Form2"; 23 this.Load += new System.EventHandler(this.Form1_Load); 24 com = new TextBox(); 25 com.Name = "com"; 26 com.Location = new Point(62, 23); 27 this.Controls.Add(com); 28 29 30 coml = new Label(); 31 coml.Name = "coml"; 32 coml.Location = new Point(25, 27); 33 coml.Text = "COM"; 34 this.Controls.Add(coml); 35 TextBox text = new TextBox(); 36 text.Name = "text"; 37 text.Location = new Point(18, 90); 38 text.Size = new Size(200, 200); 39 this.Controls.Add(text); 40 41 42 Open = new Button(); 43 Open.Name = "Open"; 44 Open.Location = new Point(177, 22); 45 Open.Text = "Open"; 46 Open.Click += new System.EventHandler(Open_Click); 47 this.Controls.Add(Open); 48 ledON = new Button(); 49 ledON.Name = "ledON"; 50 ledON.Location = new Point(27, 56); 51 ledON.Text = "ledON"; 52 this.Controls.Add(ledON); 53 ledOFF = new Button(); 54 ledOFF.Name = "ledOFF"; 55 ledOFF.Location = new Point(113, 55); 56 ledOFF.Text = "ledOFF"; 57 ledOFF.Click += new System.EventHandler(ledOFF_Click); 58 this.Controls.Add(ledOFF); 59 } 60 } 61} 62

こんな感じになるかと

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

投稿2017/05/27 09:06

編集2017/05/31 14:27
Tokeiya3

総合スコア260

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

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

c#

1public partial class Form1 : Form 2{ 3 TextBox com; 4 public void InitializeComponent(){ 5 //(中略) 6 com = new TextBox(); 7 //(後略)

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

投稿2017/05/27 08:49

編集2017/05/27 08:51
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2017/05/27 08:45

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問