2017-12-15 30 views
0

this.Enabled = falseを実行するたびに、MDI子フォームが他のフォームの後ろにジャンプします。C#WinFormsフォームを無効にすると、MDIフォームが背面にジャンプします

私がフォームを無効にする理由は、検索を実行しているため、ユーザーは応答を待つ必要があるからです。

この動作を変更するにはどうすればよいですか?

私はActivate()BringToFront()の直後にしようとしました。それは前面にフォームをもたらしますが、フォーカスを与えません。

+2

これは良い方法ではありません。プログレスバーやその他の種類のアニメーションでモーダルフォームを作成し、検索が終了したら閉じます。あなたはキャンセルボタンを追加することもできます – GuidoG

+0

これはもっと良い方法かもしれません... –

+0

...しかし、私はこれを実装する方法が完全にはわかりません。解決策1.これはMDI形式であるため、たとえば'progressBarForm.ShowDialog(this)'は他のMDI子フォームとのやりとりを妨げます。解決策2.代わりに、フォーム上に描画された透明なパネルに画像を表示したいと考えています。可能であれば、ユーザーがこのパネルの背後にあるコントロールとやり取りしないようにしたいとします。私はこれを行うために 'Enabled = false'以外の方法を知らない。ドローイングボードに戻る... –

答えて

1

したがって、検索や長い操作をしている間に、1つのMDI子フォームをdisabled(ただし非表示にする)にします。そしてそれはまだ利用できるはずです。
また、他のすべてのMDI子フォームを利用可能にします。 がドッキングされている=満たさパネルでこのMDI子フォーム上のすべてのコントロールを置く

  • :ここ

    がこれを行うための一つの方法です。

  • 検索中にこのpanel.Enabled = falseを設定し、フォーム自体はそのままにしておきます。

このようにしてもフォームは有効ですが、検索が完了するまですべてのコントロールにアクセスできません。他のすべてのフォームも利用可能です。

+0

これはどのように動作するかわかりますが、このプロジェクトでは50以上のフォームがあります。私は迅速な解決を望んでいました。 –

+0

もちろん、あなたはBaseFormを作成しています。他のすべての50のフォームはその基本フォームから継承されています。あなたのベースフォームにこれを実装して、 – GuidoG

+0

を実行してください。この質問と同じ原理です。答えは私のコメントですhttps://stackoverflow.com/questions/47813972/add-click-event-listener-for-any-control-in-entire-solution – GuidoG

関連する問題