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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

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

Q&A

解決済

2回答

5726閲覧

Windowsフォームデザイナで作成したコントロールのプロパティに別のファイルのクラスからアクセスしたい

kurosuke___

総合スコア217

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

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

0グッド

0クリップ

投稿2016/07/11 14:21

編集2016/07/11 16:44

ながったらしいタイトルですみません。

WindowsフォームデザイナでComboBoxを作って、そのプロパティにファイルを分けたクラスからアクセスしたいのですが、うまくいきません。
class1.csファイルを作り、その中のメソッドからForm1のコントロールのプロパティにアクセスしたいです。
(説明これであってるのかな?)
ComboBoxのModifireプロパティをデザイナ側でpublicにしましたが、クラスモジュール?内のメソッドからは参照できないようです・・・
何か解決策はありませんか?
よろしくお願いします。

##追記

コードを追記しました。
全部書くと長すぎるので、他のイベントは消しましたが・・・問題ないですかね?
インスタンスについてですが、確かにきちんと理解しているとはいえないですね。
クラスがワッフルの型だとすると、インスタンスはその型で作られたワッフルそのもの。みたいな感じの理解でしかないです。
pythonを勉強していましたが、イベントドリブンやオブジェクト指向プログラミングにはあまり慣れていません・・・
Windowsフォームアプリケーションは早すぎましたでしょうか・・・
この機会に理解を深めようと思います。

↓ファイルを分けたHtmlTextMerge.csファイル

C#

1namespace contentsGen1 2{ 3 class HtmlTextMerge 4 { 5 public string threeElementsGen(string elements) 6 { 7 //ここでフォームデザイナーで配置したComboBoxのプロパティを参照したい 8 } 9 } 10}

↓Forms1.cs

C#

1namespace contentsGen1 2{ 3 public partial class Form1 : Form 4 { 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 } 10}

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

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

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

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

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

Tak1wa

2016/07/11 15:50

この手の問題としてインスタンスの概念を理解していないパターンが多いです。 うまくいっていないコードを載せてください。そのほうが解決が早いでしょう。
kurosuke___

2016/07/11 16:45

ありがとうございます。追記いたしました。
guest

回答2

0

ベストアンサー

こんにちは。

別クラスにフォームインスタンスを渡して、そのインスタンスに対してコンボボックスへのアクセスなど、操作を行う必要があります。(フォームインスタンスを渡す方法、参照する方法はさまざまですが、最も単純そうな例を示します)

C#

1public partial class Form1 : Form 2{ 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 private void button1_Click(object sender, EventArgs e) 9 { 10 //別クラスにフォームインスタンスを渡す 11 var cls = new Class1(); 12 cls.Hoge(this); 13 } 14} 15 16class Class1 17{ 18 public void Hoge(Form1 form1) 19 { 20 //渡されたインスタンス(実体)のコンボボックスへアクセスする 21 form1.comboBox1.Items.AddRange(new string[] {"AAA", "BBB", "CCC" }); 22 } 23}

投稿2016/07/12 00:09

Tak1wa

総合スコア4791

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

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

kurosuke___

2016/07/12 04:45

回答有り難うございます。 なるほど、フォームのインスタンスを別のクラスのメソッドを呼び出すときに、引数に渡せばいいということでしょうか?これは参照を渡しているだけですよね? ともあれ、やりたいことができました。C#はスクリプト言語とちがっていろいろつまづきますね・・・ありがとうございました。
ozwk

2016/07/12 07:19

単純な方法ですが、 Form1はClass1が無いと動きませんし、 Class1はForm1が無いと動かないので、 この書き方だとクラスを分けた意味はあまり無いです。
Tak1wa

2016/07/12 12:02

ozwkさんが仰っているとおりですね。 フォーム側からユーティリティ的に呼び出すのであればコンボボックスインスタンスを渡すとか、仮にフォームインスタンスを渡すにしてもインターフェース経由にするなど工夫しなければなりませんね。
kurosuke___

2016/07/13 07:27

なるほど・・・いろいろと工夫が必要なようです。ありがとうございました。
guest

0

こんにちは。

C#におけるForm1クラスの他クラスでの利用に幾つか回答があります。

他にWindowsフォームでフォームのコレクションを使用するには?と言う記事もありました。

投稿2016/07/11 14:50

Chironian

総合スコア23272

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

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

kurosuke___

2016/07/11 16:44

回答ありがとうございます。 勉強も含めて、いろいろ試してみますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問