問題タブ [mdichild]
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# - 複数のフォームでクラス オブジェクトを使用する C# は、クラス内のすべての変数を変更します
MDI アプリケーションがあります。フォームの 1 つは、複数のインスタンスを同時に開くことができる必要があります。このアプリ内に Program クラスがあります。フォームのインスタンスごとに、Program オブジェクトを各フォームに配置する必要があります。これは機能していますが、データが変更されるたびに、フォームの複数のインスタンスすべてに含まれるすべてのプログラム オブジェクトが変更されます。
これが Program クラスです (今のところ非常に単純なクラスです):
}
フォームのコードは次のとおりです。
CheckMdiChildren メソッドは次のとおりです。
.net - VB.Net 3.5 MDI アプリケーション - N メモリが使用された後、MDIChild フォームが開かなくなる
誰かが助けてくれることを願っています!
VB6 から変換されたかなり大きな VB.Net MDI アプリケーションがあります。MDIChild フォームを開かずに最初に起動すると、約 35,000K が使用されます。より多くのフォームが開かれる (ただし、閉じられない) と、(タスク マネージャーによると) メモリ使用量はフォームごとに約 4,000K まで上昇します。(TM はアプリケーションに割り当てられたメモリのみを表示し、実際に使用されたメモリは表示しないことを認識しています。)
問題は、割り当てられたメモリが特定のポイントに達すると (ターゲット マシンで使用可能なメモリの量によって異なります)、1 つまたは複数の開いているフォームが閉じられるまで、フォームを開くことができなくなることです。開くことができるフォームの量の「制限」は、マシンの使用可能なメモリに依存するようです。
例: - マシン全体で 512M しかない仮想マシンでは、約 7 ~ 8 フォームのように見え、割り当てられたメモリは約 80,000K になります。- 3GB のターミナル サーバー マシンで、他のさまざまな負荷の高いアプリケーションも実行していますが、約 20 以上のフォームと約 100,000 ~ 105,000K のメモリ割り当てで停止します。
perfmon を使用して、リークがあるかどうかを確認してみました。これは、安定した使用を示しています。
ただし、フォームを閉じても、割り当てられたメモリは、閉じられた最初のフォームでは約 3000K だけ減少し、その後閉じられたフォームごとに 100K しか減少しません。その後、さらにいくつかのフォームを追加するとメモリが増加し、いくつかを閉じると、同じ -3000K、-100K のメモリ削減パターンが再び発生します。
これまでにこれに遭遇した人はいますか?これは少しショーストッパーのように見えるので、誰か助けてください!返信をお待ちしております。
ちなみに、元のVB6バージョンにはこの問題はなく、各フォームを閉じると、アプリが割り当てられたよりも少ない量をリリースするため、メモリ割り当てが徐々に増加するのではなく、最初のメモリ割り当てに戻ります。
編集:開発中に同じエラーが発生しました。UserControl で WIN32Exception がスローされているようです。エラーは「ウィンドウ ハンドルの作成中にエラーが発生しました」です。
ありがとう、よろしく、デュアン。
vb.net - GotFocus()とMDIの子
3つの子ウィンドウを持つMDIフォームがあります。
MDIは空から始まります。
各子はメニューから一度開くことができます。
複数のウィンドウを開いて上部を閉じると、フォーカスが取得されますが、新しいアクティブな子フォームのGotFocus()イベントが発生しません。
c# - c#メインメニューとmdiフォーム
これまでの私の人生では、.net開発者として、mdiフォームを多用して、たとえば「モジュール1」、「モジュール2」などの特定の「メニューポイント」を表示してきました。
私はこれを次のように行っています:
- 「isMdiContainer」を「true」に設定して親フォームを作成します
- mdiコンテナにメニューストリップを作成します
- フォームが1回だけ表示されるように、シングルトンを実装する子フォームを作成します
- 次のコードのようなものをmdiコンテナに追加します。
}
さて、これは明らかにうまくいきます。しかし、維持するのは苦痛です。別の子フォームを追加するたびに、次のことを行う必要があります。
- シングルトンを実装する
- mdiコンテナに対応するプロパティを作成します
- インスタンスを取得し、mdiの親を設定します
- 他のボタンがクリックされたときに新しいフォームを非表示にする
- 対応するボタンがクリックされたときにフォームを表示し、他のすべてのフォームを非表示にします
これをアーカイブするためのよりエレガントな、または効率的なアプローチを言うことができますか?
vb.net - クライアント領域でクリックしても MDI 子フォームがアクティブにならない
私の VB.NET アプリは、数種類の MDI 子フォームをサポートしています。いくつかの種類がありますが、他のものではなく、「厄介」です。フォーカス メカニズムがおかしくなる原因となります。「厄介な」子フォームが開かれると、タイトル バーまたは枠線をクリックしない限り、MDI 子フォームはどれもアクティブになりません。クライアント領域をクリックしても、子フォームはアクティブになりません。タイトル バーは灰色のままで、Activate または GotFocus イベントを受け取りません。しかし、不思議なことに、クリックされたフォームは実際にはフォーカスを受け取ります。これは、そのコントロールがマウス イベントとキー イベントを受け取るためです。Z オーダーと強調表示のみが変更されません。
この問題が発生すると、「問題のある」フォームが閉じられた後も持続し、後で開かれる子フォームに影響を与えます。ただし、すべての子フォームが閉じられると、問題は解消され、新しい子フォームは正常に動作します (次の「厄介な」フォームが表示されるまで)。
なぜある種類の子フォームが面倒で、他の子フォームはそうでないのか、私にはわかりません。
どんな提案でも大歓迎です。
focus - MDI 子フォームは、他の子フォームがフォーカスを取得することを許可していません
アプリケーションは MDI コンテナー アプリです。特定の子フォーム (Form1) がロードされると、フォーカスを取得し、フォーカスを解放しません。別のフォームが開いている場合、Form1 フォームが開いていると、ユーザーはそのフォーム内のフィールドを選択できません。
また、Form1 内では、同じフォームの別のフィールドにフォーカスを設定しても、フォーカスはコンボボックスから離れません。
ShowDialog を使用しておらず、TopMost が false に設定されています。
delphi - Delphi での fsMDIChild ウィンドウの配置の制御
Delphi または C++Builder で MDI 子ウィンドウ (FormStyle := fsMDIChild) の配置を制御するにはどうすればよいですか? Left、Top、Position などを設定できることはわかっていますが、特に MDI 子の場合、これらはウィンドウが作成されてデフォルトの場所に表示されるまで有効になりません。その結果、複数のウィンドウを一度に作成して配置すると、ウィンドウがデフォルトの位置に作成され、すぐに移動およびサイズ変更されるため、かなりのちらつきが発生します。
VCL ソースを掘り下げた結果、TCustomForm の CreateParams メソッドをオーバーライドし、Params パラメータの X、Y、Width、および Height フィールドを変更することしか解決策を見つけることができませんでしたが、それはハックのように感じます。これを行うよりクリーンな方法はありますか?
c# - MDI ウィンドウのメニュー ストリップ項目をマージする
親フォームと子フォームのメニュー項目を同じメニュー名でマージするにはどうすればよいですか?
c# - Windows MDI 子フォームが WINdowMaximized 状態で開かない
WindowState が Maximized に設定されている MDI フォームの子としてフォームを設定しました。
MDI コンテナーからそのフォームを開くと、最大化された状態で開きません。なぜこれが起こっているのですか?どうすれば最大化して開くことができますか?
これは、mdi コンテナーから子フォームを表示する方法です。
c# - MDI フォームのコントロールの問題
MDI フォームにボタンを配置しましたが、子フォームを開くと、ボタンが上に残り、子フォームの邪魔になります。解決する方法はありますか? 子がアクティブ化されたときにボタンを送り返すために、次のことを行いました。しかし、button1.BringToFront(); を呼び出したいと思っています。
私は以下を試しましたが、うまくいきません。
.net の永続的なバグだと思います。解決しようとする投稿がたくさんあります。パネルとのドックなどを使用しますが、ボタンのためだけにドッキングすると、アプリケーションの作業スペースが少なくなります。