問題タブ [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.
winforms - RichTextBox (winform) 段落書式を保存 (PARAFORMAT2)
私は RichTextBox コントロールを使用していますが、行間を除いてうまくいっています。PARAFORMAT2 で SendMessage を介して相互運用呼び出しを使用して、段落の行間を設定しています。
それはうまくいきます。それは私がする必要があることを正確に行います。問題は、RTF 文字列を保存してから戻すと、行間情報が失われることです。
2 つ目の RichText Box を追加し、以下のコードを使用することで、これを証明できます。richTextBox1 では、rtf 文字列が適切にフォーマットされています。しかし、richTextBox2 に到達するまでには、再びシングルスペースになっています。
フォーマットを維持するための提案はありますか? /ls 設定を使用して RTF 文字列を壊すことができることはわかっていますが、それは非常に苦痛です。どこかに欠けているだけのよりクリーンなソリューションはありますか?
アップデート:
EM_STREAMIN/OUT の提案はすばらしいものですが、残念なことに同じ狂気の結果になります。STREAMIN と STREAMOUT について詳しく読んだときに、コントロールによって提供される SaveFile と LoadFile がこれら 2 つのメッセージ コマンドの単純なラッパーであることを発見したので、簡単にするために、このサンプルではこれら 2 つのコマンドを使用しています。サンプルアプリケーションを添付しています。このコードを 1 つのテキスト ボックスと 5 つのボタンを含むフォームにカット アンド ペーストできるはずです。
読み込み、保存、クリア、DoubleSpace、SingleSpace
私は MemoryStream オブジェクトを使用して、[保存] と [読み込み] のクリックの間の一時データを処理しています。テスト: (1) DoubleSpace ボタンを使用して、1 つまたは複数の段落の間隔を変更します。(2) RichText を MemoryStream に保存します。(3) リッチ テキスト コントロールをクリアします。(4) MemoryStream データをコントロールに再ロードします。
再ロードすると、ダブルスペースのフォーマットが失われることに注意してください。他のすべての書式はそのままです。
c# - WPF WindowsFormHost から「AcceptButton」を設定する
WPF コントロールに複数のボタンを持つ winforms ユーザー コントロールがあります。
私のユーザーコントロールは以前は Windows フォームでホストされていましたが、それができました。
WindowsFormHostにある今、ユーザーコントロールで同様のことを行う方法を確立しようとしています。ParentForm プロパティが null です。
私が理想的に達成したいことが2つあります。
- AcceptButton の動作 (Enter キーでボタンを押す)
- AcceptButton フォーマット - つまり、winforms ボタンには、Accept ボタンの代替フォーマットが適用されます。
どうもありがとう、クリス
c# - umanaged ダイアログを WinForm フォームの所有者として設定するにはどうすればよいですか?
WinForm ダイアログの所有者の HWND を取得できる必要があります。アンマネージでは、前面のウィンドウの HWND を取得するバックグラウンド スレッドがあります。次に、コードは ::GetParent(frontHWND) を呼び出して、別の非モーダル MFC ダイアログを非表示にする必要があるかどうかを確認します。WinForm ダイアログが frontHWND の場合、GetParent 呼び出しに対して常に NULL が返されます。また、.Net が親と所有者の違いをクリーンアップしようとしたことを認識して、GetOwner を試しました。Spy++ を使用して WinForm ダイアログを見ると、WinForm には親または所有者がいないとも表示されます。通ってきました
上記のコードは、WinForm の所有者を設定しませんでした。OnFormShown() で WinForm コードから Win32 SetParent を呼び出してみましたが、MFC アプリケーションと WinForm がロックされました。
管理されていないダイアログ/アプリを管理されたwinformの所有者/親にする方法を誰かが説明できますか?
wpf - WPF ユーザー コントロールのキーボード入力が WinForms コンテナーに送信されない
段階的に WPF に変換している WinForms アプリケーションがあります。この時点で、アプリケーションのメイン フォームは、WPF に組み込まれた垂直サイドバーを含むフォーム (WinForm) です。サイドバーは ElementHost コントロールでホストされます。
メイン フォームでは、KeyPreview を true に設定し、OnKeyDown() をオーバーライドして、アプリケーション全体のキーボード ショートカットを処理します。サイドバーにフォーカスがある場合、キーボード イベントは OnKeyDown に送信されません。
これを修正する正しい方法は何ですか?
wpf - WinForms コンテナーでホストされている場合、マウス イベントは WPF ScrollViewer によって受信されません。
段階的に WPF に変換している WinForms アプリケーションがあります。この時点で、アプリケーションのメイン フォームは、WPF に組み込まれた垂直サイドバーを含むフォーム (WinForms) です。サイドバーは ElementHost コントロールでホストされます。
サイドバーは、他のコントロールを含む ScrollViewer で構成されています。問題は、フォーカスが WinForms aera のどこかにあり、ScrollViewer でマウス ホイールを使用すると、スクロールしないことです。
これは、WPF/WinForms の統合に関連しています。これは、100% WPF プロジェクトでは、フォーカスが別のコントロールにある場合でも、ScrollViewer がマウス ホイールに反応するためです。
これを修正する正しい方法は何ですか?
c# - Microsoft Word 97 のテキストを C# に置き換える
Word文書のテキストを部分的に置き換えるプログラムを書いています。現在、Microsoft.Office.Interop.Word アセンブリを参照していますが、Word 97 がインストールされているマシンでプログラムを実行するとエラーが発生します。
すべてが私の開発マシンで完全に動作しますが、Word 97 でも動作する必要があります。かなり簡単な解決策はありますか? または、私の問題は他の何かから来ていますか? この時点で対処しなければならない唯一のエラーは、「ファイルまたはアセンブリ "Microsoft.Office.Interop.Word, Version=14.0.0.0, ..." を読み込めませんでした」です。
最近のバージョンの Word で動作するために必ずしも必要というわけではありませんが、クライアントが Word のバージョンを更新した場合、プログラムが壊れていなければよいでしょう。何か案は?
私はこのプロジェクトを別の開発者から事前知識なしで選びました。これを Word 97 と互換性を持たせるには、コードを大幅に再設計する必要がありますか?
wpf - Visual Studio 2010: VSPackage ツール ウィンドウでの winforms ユーザー コントロールの使用
ツール ウィンドウで単純な VSPackage を作成すると、サンプルの WPF ユーザー コントロールが作成され、ツール ウィンドウに追加されます。このユーザー コントロールは WPF である必要がありますか? winforms ユーザー コントロールがあり、それをツール ウィンドウに追加しても表示されません。WPFでホストしようとしましたが成功しませんでした。これを行う標準的な方法はありますか?
wpf - ネストされた WPF UserControls をホストするときに WinForms Designer が失敗する
WPFToolKit v3.5.50211.1 で VS2008 SP1 を使用しています。
次のように、クラス ライブラリ プロジェクトに WPF UserControls をネストしました。
MainWpfUserControl
- のインスタンスが含まれています
NestedUserControl
DataGrid
これには、WPF ツールキットののインスタンスが含まれています。
同じクラス ライブラリ プロジェクトには、ホストする ElementHost を持つ WinForms UserControl が含まれていますMainWpfUserControl
。
デザイナーで WinForms UserControl を開くと、奇妙なエラーが発生します。少し掘り下げた後(NestedUserControl
コンストラクターでスローされた例外をキャッチしてログに記録した後)、次のように例外がスローされたようです。
[A]Microsoft.Windows.Controls.DataGrid は [B]Microsoft.Windows.Controls.DataGrid にキャストできません。タイプ A は、'C:\Program Files\WPF Toolkit\v3.5.50211.1\WPFToolkit.dll' の場所にあるコンテキスト 'LoadFrom' の 'WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' に由来します。タイプ B は、場所「C:\Documents and Settings\...\Local Settings\Application Data\Microsoft\VisualStudio」の「LoadNeither」コンテキストの「WPFToolkit、Version=3.5.40128.1、Culture=neutral、PublicKeyToken=31bf3856ad364e35」に由来します。 \9.0\ProjectAssemblies\zfh65-u101\WPFToolkit.dll'
誰かが似たようなことを経験しましたか?
アップデート
WPFToolkit.dll を GAC に配置することで問題を回避できたようです。しかし、これは他の理由から望ましくありません (たとえば、CopyLocal のデフォルトが false になったなど)。したがって、問題は Load Context に関連しているようです。これを制御する方法はありますか?
wpf - WPF 再描画の問題
WPF コントロールの再描画に問題があります。
WPF コントロールは、Windows フォームの ElementHost.Child として追加されます。
Windows 7 が省電力モードになり、(マウスを移動するか、キーボードのキーを押すことによって) 通常に戻ると、残りの Windows フォーム コントロールは再描画されますが、WPF 部分は再描画されません (そして、Win 7 の背景が画面に表示されます)。そのエリア)。
アプリケーションの最小化と最大化で、WPF 部分が再描画されます。
誰でもこの問題について何か考えがありますか?
c# - C#-私のアプリケーションと外部アプリケーションとの相互運用性(DLL / COM)
私は、外部データベースアプリケーションへのDLL相互運用機能を使用するC#アプリケーションを開発してきました。
この外部アプリは、C#アプリと同時に起動し、C#アプリが実行されている限り使用できます。
ここで、本当の質問は、外部アプリケーションと対話するために作成する必要のあるオブジェクトの管理に関連しています。
参照されているDLLから利用できるオブジェクトを宣言すると、これらのオブジェクトには、ファイル(プロプライエタリ)を操作し、いくつかのクエリを実行するメソッドがあります(この外部アプリのGUIで実行した場合など)。これらのオブジェクトは、を使用して「自分で」破棄されますがMarshal.ReleaseComObject(A_OBJECT)
、他のオブジェクトは別のアプリケーションドメインで実行され、を使用AppDomain.CreateDomain("A_DOMAIN")
して操作を実行し、を呼び出して、操作にAppDomain.Unload("A_DOMAIN")
使用されたDLLを解放します。
これらの回避策は、この外部アプリケーションがこれらの操作で使用されるファイルを「ブロック」しないようにするために作成されているため、フォルダーからファイルを削除または移動できます。
例えば
私はいかなる種類のAPIマニュアルも持っていないため、これらの「解決策」は両方とも試行錯誤によって達成されました。これらの解決策は正しいですか?違いを説明してもらえますか?私は本当に両方のソリューションで作業する必要がありますか、それとも一方で十分ですか?
ありがとう!