1

他のコントロールと一緒にボタン コピーがあるフォームが 1 つあります。ユーザーがコピー ボタンを押すと、BackgroundWorker がコピー操作を実行します。

コピー操作中はコントロールを無効にし、完了時に再度有効にしています。とにかく簡単な方法でそれを行うことができますか?同様に、すべてのキーボード/マウス入力を無効にして有効にします。

PS: Hour-Glass アイコンが表示されているときにユーザーがクリックした場合、すべてのクリックを収集して、GUI が空いているときにそれらを起動するべきではありません。GUI が解放されると、蓄積されたすべてのクリックが削除されます。

4

3 に答える 3

2

最初にフォームEnableを false に設定し、バックグラウンド ワーカーの終了イベントを処理して、フォームを再度有効にします。

//Lock the form
this.Enabled = false;

やるべきですか?これがあなたの探しているものではない場合は、すみません。

編集:

これを行うためのより洗練された方法を探している場合は、アニメーション化された .GIF ローダーをhttp://ajaxload.info/formのような場所から入手して、透明な背景の境界線のない画像ボックスを作成します。次に、そこで GIF を使用ShowDialogし、最初に呼び出し、処理の最後にダイアログを閉じます。これにより、一般的に使用されているものと同様のローダーが表示され、parentフォームがロックされます。

于 2012-10-10T08:15:22.370 に答える
0

すべてのコントロールを無効にする場合は、バックグラウンドプロセスの実行中にアクティブになる新しいフォームを作成できます。たとえば、このフォームを使用して進捗状況を表示できます。

于 2012-10-10T08:13:31.520 に答える
0

クラスにFormEnabledプロパティがあります。

Formフォームのすべてのコントロールを無効にすると、無効になります。これはおそらく、ウィンドウ全体を無効にする最も簡単な方法です。

編集:

直感に反し、ユーザーを混乱させるにもかかわらず、本当に入力を無効にして他に何もしたくない場合は、フォームの上にコンテンツのないラベルと透明な背景のような新しいコントロールを追加できます。 .

このようなもの:

// When starting the operation:
var transparentLabel = new Label();
transparentLabel.Bounds = form.Bounds;
// You may have to set the bacground and border and stuff, I am unsure
form.Children.Add(transparentLabel);
// Change cursor to a hourglass as well?


// When the operation is done
form.Children.Remove(transparentLabel);
// Change cursor back 

これにより、透明なラベルがフォーカスされ、他のコントロールへの入力が無効になります。

于 2012-10-10T08:15:54.750 に答える