DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コントロールをロックしたい。

環境/言語:[VB.NET2003]
分類:[.NET]

タイトルの通り処理中にコントロールをロックしたいのですが何かよい方法があるでしょうか?
Enabled=Falseだとコントロールが色が変わるので・・・
■No6734に返信(ありさんの記事)
> タイトルの通り処理中にコントロールをロックしたいのですが何かよい方法があるでしょうか?
> Enabled=Falseだとコントロールが色が変わるので・・・

「ロックしたい」の意味がわかりません・・・。
すいません。処理中などにコントロールを使用不可にしたいという意味です。
> すいません。処理中などにコントロールを使用不可にしたいという意味です。

結構有名な方法ですが、
TextBoxとLabelを差し替えるとか…。どうでしょう?
■No6740に返信(ありさんの記事)
> すいません。処理中などにコントロールを使用不可にしたいという意味です。

そういうことですか。EnabledをFalseにしグレーアウトされるのがWindows標準ですので、
それを拒否するには各コントロールごとに個別の対応が必要になると思います。

どんなコントロールが対象でしょうか?
例えば、TextBoxならReadOnlyプロパティで対応する方法があります。
みなさんありがとうございます。

antさん>コントロールの数が多いので出切れば他の方法を模索しています。


よねKEN >ラベルのクリックイベントを防ぎたいと考えています。
あまりいい方法とは思いませんが、次のようなことが考えられます。
コントロールのWndProcメソッドをオーバーライドして
EnableがFalseの時のWM_PAINTを無視するようにすれば、
できないことはありません。
2004/10/16(Sat) 11:20:15 編集(投稿者)

■No6749に返信
VB6以前は、Frame(GroupBox)などに属させておいて、
Frame側をDisableにすることで、文字色はそのままで無効にできたのですが、
VB.NETでは、子コントロールまでしっかりグレーダウンするようになりました。
(個人的には喜ばしいことですが)

顧客にもよるのですが、背景がグレーダウンするのは良いが、
文字色が濃いグレーになるのを嫌う場合がありました。
コントロールが多かったので、その時は以下のように対応しました。

該当コントロールをカスタムコントロールとして用意するか、サブクラス化する。
クラス内のメンバにそれらしい項目(プロパティ)を追加する。
それらしい項目(プロパティ)がTrueの時は、背景色をグレーダウンさせる。
(まあ、ReadOnlyと同じ様な働きをさせておく)
その時、Focusが絶対いかないように細工しておく。
この細工はいくつか方法が考えられるので省略。

文字色はそのままで背景がグレーのコントロールになる。
ReadOnlyと違ってFocus遷移しない。
(ComboBoxなどはReadOnlyがないのでその代わりにもなる)

# あまりにそういった項目が多い場合に楽で、安全な方法かと。


■追記

> ラベルのクリックイベントを防ぎたいと考えています。

あらら、それだったら、そんな難しいことしなくてもいいのに...

DOBON.NET | プログラミング道 | プログラミング掲示板