問題タブ [mdi]
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.
c# - MDIフォームの背景を変更する
C#でMDIフォームの背景色を変更するにはどうすればよいですか?
背景色プロパティを使用して変更しましたが、色は変更されていません。
このタスクを実行するにはどうすればよいですか?
.net - 生成ではなく MDI 子フォームの呼び出し
ネストされた 3 つの子を持つ MDI フォームがあります。現時点でできることは、新しいフォームを表示することだけです。例: メニュー ボタンを押すたびに、新しい子フォーム (Form1) が作成されます。ここで、同じメニュー ボタンを 2 回目以降に押すと、新しいForm1 が作成され、前のボタンの上に表示されます。
私が望むのは、イベントハンドラーがトリガーされるたびに (親フォームの menu item_click)、完全に「新しい」子フォームが生成される (新しいウィンドウがポップアップする) 代わりに、適切な子フォームをプルアップすることです。トリガーに付いているもの。
オブジェクトの再利用のようなものだと思います。
どんな助けでも大歓迎です。
私が使用しているコードサンプルは次のとおりです。
visual-c++ - MDI : タブ上のファイルの名前
最初はメイン ウィンドウが開いていない MDI アプリケーションがあります。ファイルをクリックして新規を選択すると、デフォルトのファイル名が付いた新しいタブが開きます。
ファイルをクリックして新規を選択すると、作成するファイルの名前を尋ねるダイアログ ボックスが表示されます。「OK」をクリックすると、テキストボックスに入力した名前がタブに表示されます。
タブに名前を設定するにはどうすればよいですか?
ありがとう。
winforms - MDI WinForm アプリケーションと重複する子フォームのメモリ リーク
これは、WinForm MDI アプリケーションの問題 (.net Framework 3.0) です。C#で記述します。できるだけわかりやすくしようとしているので、少し長くなってしまい申し訳ありません。
MDI アプリケーションがあります。ある時点で、1 つの MDI 子フォームがリリースされないことに気付きました。MDI 子フォームを作成して表示するメニューがあります。MDI 子フォームが閉じられると、それは破棄され、使用されたメモリは .net に戻されるはずです。しかし、驚いたことに、これは真実ではありません。すべての MDI 子フォーム インスタンスはメモリに保持されます。これは明らかに「メモリリーク」です。まあ、それは .net の実際のリークではありません。閉じたフォームは死んでいるはずだと思うだけですが、どういうわけか、閉じたフォームにまだ接続している外の世界からの未知の参照が少なくとも1つあります.
Web でいくつかの記事を読みました。MDI 子フォームが閉じているときに、すべてのイベント ハンドラーの配線を解除する必要があると言う人もいます。そうしないと、一部のイベント ハンドラーがフォームを存続させてしまう可能性があります。フォームを閉じる前に DataBindings を消去する必要があると言う人もいます。そうしないと、DataBindings がグローバル Hashtable への参照を追加して、フォームを存続させます。
私のフォームにはかなり多くのものが含まれています。多くのイベント ハンドラーと多くの DataBinding と多くの BindingSource と、ユーザー コントロールと HelpProvider を含む疑いのあるコントロールがいくつかあります。関連するすべてのコントロールからすべてのイベント ハンドラーを切り離し、すべての DataBinding と DataSource をクリアする大きなメソッドを作成します。HelpProvider コントロールとユーザー コントロールは慎重に破棄されます。
最後に、DataBinding と DataSource をクリアする必要がないことがわかりました。イベント ハンドラーが問題の原因であることは間違いありません。そしてMDIのフォーム構造も何かに貢献しています。
実験中に、MDI 子フォームを作成すると、それを閉じても、メモリ内に 1 つのインスタンスが残ることがわかりました。参照はメイン フォームの PropertyStore からです。これは、メイン フォームが閉じられない限り (アプリケーションが終了しない限り)、メモリ内に MDI 子フォームのインスタンスが常に 1 つ存在することを意味します。幸いなことに、子フォームを何度開いたり閉じたりしても、インスタンスは 1 つだけで、大きな "リーク" は発生しません。
イベント ハンドラーになると、事態はさらに複雑になります。これに対処する必要があります。私のフォームのすべてのイベント ハンドラーは、匿名のイベント ハンドラーです。コード例を次に示します。
WherebtnSave_Click
も MDI 子フォームのメソッドです。上記は、さまざまなコントロールとさまざまな種類のイベントに常に当てはまります。私にとって、これは双方向の循環参照です。btnSave は、イベント ハンドラーを介して MDI 子フォームの参照を保持します。MDI 子フォームは、btnSave インスタンスの参照を保持します。繰り返しになりますが、このような双方向の循環参照は、.net のガベージ コレクターに問題を引き起こすことはありません。これは、フォームが破棄されているときにイベントを明示的に配線解除する必要がないことを意味します。
しかし、真実はそうではありません。一部のイベント ハンドラについては、安全です。それらを無視しても、インスタンスが重複することはありません。他のいくつかのイベント ハンドラーでは、1 つのインスタンスがメモリに残ります (MDI フォーム構造と同様の効果ですが、今回はイベント ハンドラーのハングが原因です)。他の一部のイベント ハンドラーでは、メモリ内ですべてのインスタンスが開かれます。これら 3 種類のイベント ハンドラの違いについて、私は完全に混乱しています。コントロールは同じ方法で作成され、イベントは同じ方法で関連付けられます。違いはなんですか?(違いを生むのはイベント処理メソッドだとは言わないでください。)この有線シナリオの経験があり、私に答えがある人はいますか?どうもありがとう。
したがって、安全上の問題から、フォームが破棄されるときにすべてのイベント ハンドラーの配線を解除する必要があります。これは、各コントロールの同様のコードの長いリストになります。リフレクションを使用して再帰的にコントロールからイベントを削除する一般的な方法はありますか? パフォーマンスの問題はどうですか?
これで私の話は終わりです。私はまだ問題の真っ最中です。助けていただきありがとうございます。
c# - タブ付きMDIインターフェイスを作成する
私はC#2005を使用してWindowsアプリケーションを開発しています。タブコンテナを使用して子フォームを表示することを計画しています。メニューストリップを使用してメニューを表示し、MainMenuフォームのIsMDIContainer=trueプロパティを設定しました。MainMenuフォームにはタブコントロールも含まれており、すべての子フォームをタブコントロールのタップページとして表示する予定です。
これまで、ユーザーがメニューオプションを選択したときにタブページを追加することができました。しかし、タブページ内に子フォーム自体を表示する方法がわかりません。
メニュークリックイベントで次のコードを使用しました。
タブページに子フォームを正しく表示するにはどうすればよいですか?[ファイル]->[新しいタイプのアプリケーション]が必要ありません。メニュークリックイベントで同じ(空白の)フォームが表示されます。私のメニューオプションは、それぞれ固有の/異なるフォームを表示する必要があります。
ありがとうございました。
ラリットクマールバリク
delphi - クライアント領域全体を使用する子フォーム?
クライアント領域全体を使用する MDI 子ウィンドウを表示したいと思います。灰色の部分は作業ウィンドウの右側ではなく、子ウィンドウにタイトルバーと境界線を表示します。
http://img149.imageshack.us/img149/3204/delphimdichildwindowwit.jpg
計画どおりに動作しないコードは次のとおりです。
自分で座標を計算する以外に、これを行う方法はありますか (例: ClientWidth など)?
ありがとうございました。
c# - mdiparent 上の C# グラス
mdiparent で DwmExtendFrameIntoClientArea メソッドを使用しようとしています。
ただし、ガラスは正しくレンダリングされません。これは回避できる mdiparent の制限ですか? フォームが mdicontainer として設定されていない場合、ガラスは完全にレンダリングされます。ガラス部分はガラスではなく白く塗装。
c# - 親フォームのタイトル バーから MDI 子テキストを削除する方法は? C#.NET
MDI 親フォームとして機能するフォームと、MDI 子として機能する他のいくつかのフォームがあります。子ウィンドウには FormBorderStyle.None と ControlBox = false があるため、MDI の子からの境界線は MDI の親に表示されません。しかし、私のアプリケーションでは MDI の子が最大化されて実行され、その場合、メイン フォーム ウィンドウのタイトル テキストには、次のように常に子フォームのテキストが含まれます。
"- [Child title]"
メイン タイトル バーの一部を削除するにはどうすればよいですか? Form.Text プロパティを見てきましたが、画面に表示される完全なタイトルが含まれています。ただし、テキストを別のものに設定すると、最初の部分のみが変更されます。子タイトルは常に追加され、この方法で削除することはできません。.NET Reflector を簡単に説明しましたが、特に興味深い結果は得られませんでした。
c# - MDI 親フォームの灰色の背景を削除するには?
私がやろうとしているのは、mdi コンテナーとしてマークされたフォームにガラスを描画することです。ただし、IsMdiContainer が設定されるとすぐに、フォームは MdiClient をコントロールのリストに追加します。この時点で、親フォームに何かが起こります。MdiClient が配置されているフォーム全体に濃い灰色のパネルがドッキングされているようです。
次に、MdiClient コントロールを少し邪魔にならないように次のようにします。
これにより、実際の MdiClient 領域が小さくなり、その背後にあるもの (子フォームをホストするビット) を確認できるようになり、親フォームがペイントなどではないことは明らかです。
ここで見られるように: http://img525.imageshack.us/img525/8605/mdiglassproblem.png
MdiClient の背後の領域 (ガラス セクションで白くレンダリングされた濃い灰色の部分) をどうにかして取り除く必要があります。
何か案は?
PS - Vista で DwmExtendFrameIntoClientArea メソッドを使用して Glass をレンダリングしています。
c# - mdiparent ウィンドウの中央に mdichild をロードする方法
こんにちは、みんな、
子ウィンドウを作成するウィンドウ プロパティが mdiparent の中心にあるこのコードがあります。
ただし、子ウィンドウを中央でポップする代わりに、左側にロードします。誰でもこれについて私を助けることができますか?以下のスクリーンショットを参照してください。
私はvbでも同じことをしようとしました。そこでも同じエラーが発生します。FormStartPosition.CenterParent のプロパティはダミーだと思います。