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

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

解決済

4回答

8328閲覧

C#のフォームコントロールを別プロジェクトのクラスから行うにはどうすればよいですか。

deep

総合スコア20

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クリップ

投稿2018/05/31 12:07

こちらを参考に別クラスからの
フォームコントロールはできるようになったのですが、
別のプロジェクト(クラス)をDLL化して参照した場合の
フォームコントロール方法が分からず困っております。

上記リンク先を例にすると
質問者の提示しているコードの引数となっている部分で
エラーが出るのでどうにかしたいです。

C#

1<Work.cs> 2public void Worker(MainForm form) 3{ 4form.WriteTextMessage("テストメッセージ"); 5}

エラー内容は、
型、または名前空間の名前が見つかりませんでした。という内容です。
検索はかけているのですが、
なかなか別プロジェクトからの参照?アプローチが見つからず
思いきって質問させていただきました。

解決方法があればお教えいただけると助かります。
よろしくお願いいたします。

windows10 64bit visual studio 2015 for windows desktop

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

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

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

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

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

guest

回答4

0

.csファイルの先頭に

csharp

1using {MainFormのある名前空間};

を追加する

または

MainFormを使用する際に

csharp

1var frm = new {MainFormのある名前空間}.MainForm(); 2

と明示的に指定する

といった方法で使用できないでしょうか。

投稿2018/05/31 12:56

ponpu1601

総合スコア166

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

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

deep

2018/05/31 19:32

ご回答ありがとうございます。 題目にあるエラー内容が表示されてしまいます。
ponpu1601

2018/06/01 02:13

質問を取り違えておりました。申し訳ありません。 Work.csが含まれているプロジェクトをdllとしてMainFormのあるプロジェクトから参照されているのですね。 参考にされた質問の回答にあるように、 ・インターフェースを定義する ・TextBoxを渡すようにする といった対策ではいけないのでしょうか?
deep

2018/06/02 00:32

ご回答ありがとうございます。 その方法も検討させていただきます。
guest

0

コントロールしたいクラスからは、イベントだけを発生させるようにして、
フォーム側でイベントを受けて動作するようにしたら、別クラスからコントロールしたことと同じになりませんか?

投稿2018/06/01 00:45

tamina

総合スコア136

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

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

deep

2018/06/02 00:31

ご回答ありがとうございます。 ご指摘の通りでEXEファイルをDLLと同じように参照できるということを知らなかったため 発生した問題でした。
guest

0

提示のコードは、DLL側のコードで、エラーと言うのは、コンパイル(ビルド)エラーですね。
とすると、Work.cs のコードからは、MainFormがなんであるか分からないから、エラーとなると思います。これが、他のDLL呼出しならば、そのDLLを参照指定すれば、良いのですが、逆ができるでしょうか?

簡単には、DLLのメソッドを値を返すだけとして、メインの方がその値を表示するようにした方が良いと思います。
他にも方法がありそうな気もしますが、参考までに。

投稿2018/05/31 13:03

pepperleaf

総合スコア6383

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

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

deep

2018/05/31 19:41

ご回答ありがとうございます。 >他のDLL呼出しならば、そのDLLを参照指定すれば、良いのですが、 はい。他のDLLの呼び出しは参照することで問題なく動いています。 出来れば題目の通りフォームをコントロール出来たほうが 処理の流れが分かりやすく保守もしやすいので何とか方法はないかと探している次第です。。。
guest

0

自己解決

EXEもDLLのように参照に追加できるということを知らなかったのが問題の原因でした。
1.別プロジェクトのクラスライブラリで操作したい別プロジェクトのフォーム(exe)を参照追加
2.クラスライブラリをDLL化後に別プロジェクト(フォーム)からも参照。
※相互に参照している状態になる

これで解決しました。
ご回答いただいた皆様。
どうもありがとうございました。

投稿2018/06/02 00:36

編集2018/06/02 00:37
deep

総合スコア20

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問