質問
現在、サイレントプリントモジュールを作成しています。現在使用しているコントロールは、コントロールハンドルが既に作成されていることを確認しています( IsHandleCreated
)。私はこれをだまそうと全力を尽くしましたが、まったく運がありませんでした。
画面に何も表示せずにコントロールのハンドルを作成するにはどうすればよいかについてのアイデアがありますか?
解決
CreateParams
プロパティゲッターをオーバーロードしてみてください。その中で、 WS_VISIBLE
フラグをクリアします。
他のヒント
Handle プロパティにアクセスする必要があります(結果をダミー変数などに格納します)。リフレクターを見てください。ハンドルの作成を強制します。
他のコントロールでも同じ問題が発生し、 Control.CreateControl()
メソッド:
private void CheckForExistingHandle(Control control)
{
if (!control.IsHandleCreated)
control.CreateControl();
}
しかし、印刷モジュールでどのように機能するかわかりません。
CreationParamsのWS_VISIBLEを設定することで、この厄介なハンドル作成の問題を解決しました。 ControlのCreationParamsプロパティをオーバーライドするか、適切なCreateParamsインスタンスでCreateHandleメソッドを呼び出します。 リンク
プライベートメソッドCreateHandleを呼び出すと、作業が行われます。
MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance);
ch.Invoke(frm, new object[0]);
所属していません StackOverflow