🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

3008閲覧

WindowsフォームからWPFで作成したフォームまたはユーザーコントロールの呼び出し方がわかりません。

matsutake

総合スコア34

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/11/14 03:59

お世話になります。
現在、Visual Studio 2008を使用し、vb.netにてWindowsアプリケーションの開発をしております。
その中でWindowsフォームからボタンをクリックするとWPFで作成したフォームまたはユーザーコントロールを
呼び出そうとしているのですが、エラーが表示されうまくいきません。

試しに、新規でプロジェクトを作成し、Form1とForm2を準備し、更にWPFのユーザーコントロール(適当にボタンが貼ってあるもの)を作成し、
そのユーザーコントロールをForm2に貼り付け、Form1に貼ってあるボタンをクリックすると
ユーザーコントロールが貼り付けられたForm2を表示するという簡単なプログラムを作成してみました。
この場合は問題なくForm1からForm2が表示されました。

しかし、元々別で作成しましたForm(ラベルやボタンなど何個も貼り付けてある画面)にボタンを設け、
そのボタンをクリックすると上記のForm2を表示するという同様のプログラムを作成したのですが、
子の場合はFOrm2が表示されず、以下のエラーが表示されてしまいます。

「呼び出しスレッドは、多数の UI コンポーネントが必要としているため、STA である必要があります。」

色々と調べてみたものの納得行くような原因が見つからず、解決方法もわからず、行き詰っておる状況でございます。
また、こちらで質問させて頂く上でどういった情報を記載するべきかもわからない状況で、
先ずは現状を記載させて頂きました。
この場合、どのようなことが原因と考えられますでしょうか。

宜しくお願い致します。

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

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

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

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

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

matsutake

2019/11/14 04:21

早々のご回答、ありがとうございます。 申し訳ございませんが、STAにつきましても調べてみたのですが、いまいちよく理解できておりません。 また、STAについての書き方ですとか、よくサンプルコードも見ましたが、 どこにどのように書くのか等もよくわからない状況でございます。
Zuishin

2019/11/14 04:24

Program.cs を開いてみてください。Main メソッドに [STAThread] がついていますか? もし無ければつけてください。 ついていた場合、何か別のスレッドを使っていませんか?
Zuishin

2019/11/14 04:25

どちらも心当たりが無い場合、「問題の再現する」最小のプロジェクトを作成し、そのプロジェクトをこちらで再現できるよう、作成方法を詳細に書いてください。
matsutake

2019/11/14 04:31

お世話になります。 現在、vb.netでの開発のため、Program.csがございません。 vb.netの場合は、「MainメソッドにSTAThreadAttribute属性を付けなくてもSTAになる」ということも 調べているうちにわかったので、今回のメッセージが何か別の原因があるのかもしれないと思っておるのですが・・・。 別のスレッドを使っているとは具体的にどういうことが考えられるのでしょうか。
Zuishin

2019/11/14 04:33

VB .NET でしたね。うっかり見落としてました。 とりあえず再現する最小のプロジェクトを提示してください。 それを見て考えます。
matsutake

2019/11/14 04:38

申し訳ございません。 最小のプロジェクトを提示するとは、具体的に何をご提示させて頂けばよろしいのでしょうか。 ソースをコピーして貼ればよいのでしょうか。 色々と申し訳ございません。
Zuishin

2019/11/14 04:42

いえ、プロジェクトの新規作成から始め、最小の手順で再現するものを作ってください。 これは私たちもよく使うテクニックで、最小の変更で問題を発現させることにより、どこに問題があるのかをあぶりだすことができます。
matsutake

2019/11/14 05:01

かしこまりました。 最初にも記載させて頂きましたが、新規で作成したプロジェクトでは問題なく動いたのですが、 既存のプロジェクトにユーザーコントロールを追加した場合にできない状況でございます。 ですので、既存のプロジェクトの不要部分を削除し、ご提示させて頂いてもよろしいでしょうか。 また、ご提示させて頂く場合は、そのプロジェクトをどのようにさせて頂けばよいのでしょうか。
Zuishin

2019/11/14 05:26

では既存プロジェクトをバックアップし、問題点が再現する状態を保ちながら可能な限り小さくしてください。 再現しなくなった時には、何を削った時に再現しなくなったのかがわかります。そこに問題があります。 それを見て自分で解決できるようなら、自分で回答を書いて自己解決してください。難しければこちらで見ます。 その際には質問を編集し、ソースコードを全て載せてください。載らない場合はまだ小さくする余地があります。 ソースを質問に書く場合にはマークダウンのコードブロックを使ってください。
matsutake

2019/11/14 05:29

お世話になっております。 ご丁寧にアドバイス等、ありがとうございました。 先ずは自分で削っていきながら調べてみようと思います。 それでもわからない場合は、改めてご相談させてください。 長時間お付き合い頂き、ありがとうございました。
guest

回答1

0

自己解決

今回の原因は、64bitで動作するようにとビルド時のターゲットCPUを当初「x64」で実施しておりましたが、
WPFのことで色々調べていたところ「x86」で実施するのがよいということがわかったのですが、
参照していた他のdllも同様に「x86」でビルドしたところエラーが表示されることなく動作しましたので、
解決とさせていただきました。
Zuishinさん、色々とアドバイスを頂き、ありがとうございました。

投稿2019/11/14 10:24

matsutake

総合スコア34

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

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

Zuishin

2019/11/14 10:37

WPF を x86 で実装する方が良いという情報のソースを追記お願いします。
Zuishin

2019/11/18 09:39

WPF を x86 で実装する方が良いという情報のソースを追記お願いします。
Zuishin

2019/11/20 12:21

WPF を x86 で実装する方が良いという情報のソースを追記お願いします。
matsutake

2019/12/04 00:39

ご返信遅くなり、大変申し訳ございません。 結果的に解決できた今回の件ですが、私が参考にさせて頂きました情報がどこだったのか 探し続けているのですが、未だに見つけることが出来ておりません。 申し訳ございませんが、見つけることが出来ましたら、改めて追記させて頂きますので 宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問