2016-12-14 9 views
1

私は唯一のシステムの色を表示します私自身の小さなカラーピッカーを書いているWinフォームアプリケーションを持っています。基本的にはTableLayoutPanelの小さなパネルが追加され、背景色を設定するだけです。

非常にシンプル:

enter image description here

は今、私は持つためにこのフォームを開いている:

using (frmColourWindow colourPicker = new frmColourWindow (Cursor.Position.X, Cursor.Position.Y, findingPriority)) 
{ 
    colourPicker.ShowDialog(); 
    if (!colourPicker.SelectedColor.IsEmpty) 
    { 
     pnlColor.BackColor = colourPicker._SelectedColor; 
    }      
} 

、ユーザーは以下のいずれかをクリックしたときDialogResultを設定することによってでそれをクローズしカラーパネル。

このすべてはかなり良い作品は、私が権利を取得するために管理することができない唯一のことは、それがフォーカスを失ったときに、フォームを閉じている(例えば、ユーザーがどこかをクリックするか、入力を開始したとき)。私はDeactivateLostFocus、およびLeaveイベントを見て持っていました。私は彼らに欲しいときにそれらのイベントを発生させるように見えません。たぶん私は何か明白なものを見逃していますか

+0

でフォームを開く 'にShowDialog()'あなただけのそのフォームは、それがクローズされるまで「使用」することができます。あなたが正しく欲しいものを理解したら、 'ShowDialog()'の代わりに 'Show()'を使うと、それらのイベントは起動するはずです。 –

+0

確かに、パネルを選択してApplicationSettingsをクリックします。ヘルプが必要な場合は、F1キーを押します。 –

+0

@Bojan、 'Show()'を使った後、カラーピッカーの中からフォームをプログラム的に 'Close()'すると、私のカラーピッカーから選択した色をどのように得ることができますか?フォームが終了すると背面の小さなパネルがその色に設定されなければならないので、フォームは –

答えて

2

ShowDialog()あなただけが開いているので、それが焦点を当てる失ったことがないので、イベントDeactivateLostFocusLeaveのように動作しません]ダイアログを使用することができます。

あなたは開いてフォームを閉じるには、これらのイベントを使用するShow()コマンドを使用する必要があります。

この問題に対処するために、オブジェクトに色を割り当てることについてのコメントに指摘しました。次の操作を実行できます。

あなたのカラーピッカーで に

Color SelectedColor {get; private set; } 

をパブリックプロパティ

を宣言し、これにご使用してステートメントを変更します。

var colourPicker = new frmColourWindow (Cursor.Position.X, Cursor.Position.Y, findingPriority); 
colourPicker.Closed += (o, args) => { pnlColor.BackColor = colourPicker.SelectedColor }; 
colourPicker.Show(); 

これはただもちろん、多くの可能な解決策の一つでありますそれのために。

+0

は魅力的に機能します! –

+0

もちろん、別のプログラムを起動すると、フォーカスが失われます。 –

0

あなたはShow()方法でフォームを表示し、その後Form.Deactivateイベントを使用することによって、これを達成することができます。私はコメントで述べたように、使用して