問題タブ [winforms-interop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2238 参照

wpf - ElementHost でホストされている場合、アプリケーションレベルのリソースは動的ではありません

WinForms コンテナーで WPF UserControl をホストしています。ここで、UserControl のテーマ/スキンを設定できるようにしたいと考えています。これを行うために、「スキン」を定義するリソース ディクショナリをいくつか用意しました。アプリが起動したら、「新しい System.Windows.Application()」を作成して、Application.Current が存在するようにします。テーマを変更するには、実行時に古いスキンを削除し、新しいスキンをアプリケーション レベルのリソース ディクショナリにマージします。ただし、これにより、UserControl で動的に参照されるリソースは変更されません。これをストレートな WPF アプリケーションで試してみたところ、問題なく動作しました。私は何かを見逃していますか、それともこれを行うことはまったく不可能ですか? ちなみに、UserControl を初期化する前にアプリケーション リソースにスキンを追加すると機能しますが、その後スキンを変更することはできません。

これを最も基本的な方法でレポするには:

新しい WinForms アプリケーションを作成します。アプリに WPF UserControl を追加します。これはとても簡単です:

それぞれの色のキー ButtonBG を持つ SolidColorBrush を持つ 2 つの ResourceDictionaries、White.xaml と Black.xaml (または何でも) を作成します。Form1.cs で、2 つのボタンと ElementHost を追加します。ElementHost の子を、作成したばかりの UserControl のインスタンスに設定します。スキンを交換するイベントにボタンを接続します。

Program.cs で、Application.Current が存在することを確認し、初期スキンを設定します。

ここで、白のボタンをクリックすると、UserControl のボタンが白に変わり、黒のボタンをクリックするとボタンが黒に変わることが期待されます。ただし、これは起こりません。

誰かが理由を知っていますか?解決策はありますか?

編集:アイデア: おそらく、テーマが変更されたときに DynamicResources の再評価を強制する方法があれば、それはうまくいくでしょう。

ありがとう、ダスティ

0 投票する
2 に答える
3065 参照

c# - C# Winforms-WPF 相互運用

現在、透明効果に依存する Winforms アプリがあります。しかし、これは前の背後にある絶対的な苦痛であることが証明されています! Winforms as Im learning は、透明性を特にうまく処理しません。

透明性ビットに WPF コンポーネントを使用し、残りに winforms を使用すると、これが簡単になるかどうか疑問に思っていました (アプリ全体を WPF に移行したいのですが、これは実現可能ではありません!)。私はWPFについてほとんど何も知らないので、私がここにいる理由です! 私が考えていたのは:

1) Winforms ユーザー コントロール内で WPF コンポーネントをホストします。例: WPF コントロールの例:

2) WPF コントロールの白い四角形 (ダイアログ) 内で Winforms ユーザー コントロール (コンテンツ) をホストします。3) コンテンツ (Winforms ユーザー コントロール) が WPF コントロールの親でコードを呼び出せるようにします。

まず最初に...

  • これは合理的なことですか、それとも間違ったツリーを吠えていますか?
  • これは簡単な方法で達成できますか?
  • 誰でもここで私を助けることができますか? (サンプルコードをいただければ幸いです!)
  • 最後に ... a) WPF を学び、b) より自給自足になるのに役立つオンライン リソースはありますか?
0 投票する
2 に答える
1644 参照

winforms - 複数の COMCTL32.dll をプロセスにロードできますか?

私は、(最近) 主に WinForms アプリで使用される ActiveX コントロールを開発しています。

ActiveX コントロールには「プロパティ ページ」ダイアログがあり、AxHost クラスの ShowPropertyPages メソッドを使用してプログラムで表示できます。これは、コントロールのプロパティを編集するために Visual Studio で表示できるカスタム UI です。

このプロパティ ページ ダイアログには、ImageList を使用してリスト項目の横にアイコンを表示する ListBox コントロールが含まれています。これらのアイコンは、32 ビットのアルファ混合ビットマップです。これらを正しく表示するには、COMCTL32.DLL のバージョン6.0以降を使用する必要があります。

残念ながら、WinForms アプリを実行すると、 COMCTL32.DLL バージョン5.xxxが読み込まれて使用されます。その結果、プロパティ ページ ダイアログが表示されると、アイコンの見栄えが悪くなります (半透明の領域が黒一色で表示されます)。

私の質問は、プロセスが何を使用しているかに関係なく、ActiveX コントロールのプロパティ ページ UI 内から COMCTL32.dll バージョン 6.0 以降を確実に使用できる方法はありますか? または、ホスト プロセスにバージョン 6.0 を使用させることはできますか? (そうではないと思います。なぜなら、ホスト プロセスが、ActiveX コントロール内のどのコードよりも前に、COMCTL32.DLL を既にメモリにロードしている可能性があるからです。

この Web ページでは、COMCTL32 6.0 を使用するいくつかのシナリオについて説明していますが、私がいる状況については説明していません。

0 投票する
1 に答える
1347 参照

c# - 保存/印刷プレビューダイアログポップアップを無効または非表示にする

WinFormに配置されたActiveXコントロールを使用しています。ユーザーが保存または印刷しようとすると、常に最初にダイアログボックスが表示されます。ダイアログボックスをすぐに閉じるか、そもそも表示されないようにしたいのですが。

問題のコントロールは、どのボタンを押したかを知らせるイベントを発生させないため、「on_print」通知を探してキャンセルすることはできません。

0 投票する
1 に答える
1257 参照

winforms - ドラッグアンドドロップは、読み取り専用のWinFormコンテナ(およびドラッグアンドドロップの他の特性)を変更します

1つのアプリケーション内のWinFormRichTextBox間、およびそれらと外部アプリケーション間のドラッグアンドドロップをサンプリングすると、2つの興味深い観察結果が明らかになりました(項目1は確かにバグのようです。完璧な世界では、項目2もおそらくバグです)。

  1. 一部のドラッグアンドドロップ操作では、読み取り専用に設定されているかどうかに関係なく、ドラッグされたテキストがソースコンテナから削除されます。(私のオープンソースサイトのバグレポートでこれに最初に気付いたMark Morganに感謝します。)
  2. テキストが保持されるか、ソースコンテナから削除されるかは、さまざまなアプリケーション間で一貫性がありません。

ドラッグアンドドロップの動作がどうあるべきかを示す明確なリファレンスが見つかりませんでした。私が見つけた最も近いものは、 Windowsユーザーエクスペリエンスインタラクションガイドライン(Vistaの場合)の476ページにあります:「ドラッグアンドドロップ:オブジェクトはドロップターゲットに移動またはコピーされます」。まあ、それは確かに私の観察と一致しています。オブジェクトを移動するアプリケーションもあれば、コピーするアプリケーションもあります。

質問:上記の項目1の回避策を見つけたいと思います。読み取り専用コンテナが侵害されていないことは私を苛立たせます!二次的な質問として、ドラッグアンドドロップがどのように動作するかについて誰かが言及しているのではないかと思います。いつそれは動きであり、いつそれはコピーですか?

私のサンプルWinFormアプリケーション(以下のコード)には2つのRichTextBoxコントロールが含まれており、左側のコントロールは読み取り専用(これをRTB1と呼びます)で、テキストで初期化されています。右側(RTB2)は読み取り/書き込みであるため、テキストを受信できます。どちらも、テストでドラッグアンドドロップが有効になっています。これが私がテストした組み合わせです。各グループには、少なくとも1つの「奇数マンアウト」があることに注意してください。


  1. RTB1からRTB2へ:移動
  2. RTB1から他のRTB(外部)へ:移動
  3. RTB1からワードパッドへ:コピー
  4. RTB1からWord2003へ:移動
  5. RTB1からOutlook2003へ:コピー
  6. RTB1からFirefox3.0へ:コピー


  7. RTB2から他のRTB(外部)へ:移動

  8. RTB2からワードパッドへ:コピー
  9. RTB2からOutlook2003へ:コピー
  10. RTB2からFirefox3.0へ:コピー


  11. Outlook2003からRTB2へ:移動

  12. ワードパッドからRTB2へ:移動
  13. Word2003からRTB2へ:移動
  14. 他のRTB(外部)からRTB2へ:移動
  15. Firefox3.0からRTB2へ:コピー


  16. Word2003からOutlook2003へ:コピー

  17. Outlook2003からWord2003へ:移動

テストはWinXPで実行されます。
.NET 2.0でコンパイルされたテストアプリ(同じ結果で.NET 3.5をいくつか試してみました)。


サンプルアプリケーションは次のとおりです。

0 投票する
6 に答える
4822 参照

c# - ac# win フォーム アプリケーションでキーボード ストロークをトラップする方法 (CTRl + alt +Del)

Ctrl+ Alt+Delキーの組み合わせを処理する方法はありますか。たとえば、クイズ アプリケーション (Win Forms) では、ユーザーはテストが終了するまで他のウィンドウに切り替えることができません。

C# の標準プロパティを使用して、キー ストロークCtrlとキー ストロークを個別にキャプチャできます。Altしかし、ユーザーがDelキーを押すと。コントロールがアプリケーションから出て、Windows がそれを処理します。

どんな考えでも役に立ちます。

ありがとう。

0 投票する
1 に答える
474 参照

.net - Iterop Forms Toolkit の検証およびフォーカス イベント

私は既存の VB6 アプリケーションを持っていますが、そのコードを徐々に DotNet に移行しています。多くの場合、これは DotNet ユーザー コントロールを使用し、Interop Forms Toolkit v2 を使用して VB6 フォームでホストする必要があることを意味します。

現在の方法は、C# でユーザー コントロールを開発し、C# バージョンから継承した VB.NET ユーザー コントロールを作成し、VB.NET コントロールを VB6 形式でホストすることです。

私が苦労している唯一の部分は、フォーカスを取得する次のコントロールが Dotnet ユーザーコントロールの外にあるときに、テキストボックスで Leave または Validated イベントをキャプチャしようとすることです。イベントが発生しないか、ハンドラが実行されません。

誰かがこの問題を解決しましたか、それとも何か不足していますか?

0 投票する
3 に答える
10331 参照

c# - カスタム コンテキスト メニュー項目を Windows フォームのタイトル バーに追加する

Windows フォームのタイトル バーのコンテキスト メニューに項目を追加する方法を示すスレッドを MSDN で見つけました。

残念ながら、カスタム メニュー項目でイベントを登録する方法が示されていないため、その方法を理解できませんでした。以下は、新しい Windows フォーム アプリケーションにコピー アンド ペーストできるサンプル アプリケーションです。サンプルを完成させるにはどうすればよいですか?

0 投票する
3 に答える
285 参照

wpf - WPF アプリ - 対応する System.Windows.Forms.Form への参照を取得する方法は?

私の WPF プロジェクトには、WPF ウィンドウがあります。WPF プロジェクトでSticky Windows Solutionを使用したいと考えています。ライブラリが必要とするパラメータは、System.Windows.Forms.Form オブジェクトの 1 つだけです。

WPF Window オブジェクトから Form オブジェクトを取得する方法はありますか?