- - PR -
[RadioButton] CheckedChangedイベントが2回走る
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-11-08 07:30
■開発環境
Visual Basic 2008 Express Edition VB.NET Windows Application ■内容 フォームにラジオボタン3つを配置し、以下のようにその3つのCheckedChagedイベントを取得して処理を実装しています。 ===== Private Sub RadioButton_Changed(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles rdbA.CheckedChanged, rdbB.CheckedChanged, rdbC.CheckedChanged ===== ラジオボタンAが選択された状態でラジオボタンBを選択すると、それぞれのChangeイベントがハンドルされてしまい、このメソッドが2回走ってしまうことになります。 動作上の影響はありませんが、無駄な処理が走ることは避けたい為、何か回避方法をご存知でしたらご教授願えますでしょうか。 宜しくお願い致します。 | ||||||||
|
投稿日時: 2008-11-08 07:57
このイベントでどのような処理を実装しているのか分かりませんが
senderごとにオン/オフしたときの処理を切り分ければいいんじゃないでしょうか。 | ||||||||
|
投稿日時: 2008-11-08 09:47
早速のご回答有難う御座います。 このイベントでは、これらのラジオボタンでの検索結果を再表示するという処理を実施しています。 ですので、もん吉さんの仰る通りONのsenderをハンドルした時のみ再検索&再表示のロジックが処理されるようにすることで解決致しました。 ===== If sender.GetType.Name = "RadioButton" _ AndAlso sender.checked = True Then Me.DataRefresh() End If ===== どうも有難う御座いました。 | ||||||||
|
投稿日時: 2008-11-10 14:28
本題と関係ありませんが、気になったので指摘しておきます。 1行目は RadioButton というクラスが他の名前空間にないとも限らない(現実的にはないんでしょうが)し、文字列に変換してから比較するとたぶん遅いと思います。 2行目の sender の checked は遅延バインディングで、これもパフォーマンスに影響します。Option Strict On だとコンパイルエラーになります。 一例ですが、私ならたぶんこう書きます。
| ||||||||
|
投稿日時: 2008-11-11 11:18
てってさん、ご指摘有難う御座います。
遅延バインディングはなるだけ避けた方がよいんですね。 きちんと型変換してから処理を行うよう意識します。 まだまだ未熟なのでこのようなご指摘もとても参考になります。 有難う御座いました。 | ||||||||
|
投稿日時: 2008-11-11 23:02
テッテさん、フォローありがとうございます。
その問題はスルーしてました(^^; ちなみに私はTryCastではなくDirectCastをよく使ってます。 | ||||||||
|
投稿日時: 2008-11-12 01:44
もん吉さん、再び有難う御座います。 今回のケースはラジオボタン以外のコントロールもハンドルすることになりましたので、TryCastを使用しようと思います。 ラジオボタンのみしかハンドルしないケースだとDirectCastの方が良いんでしょうか。。 TryCastだと変換に失敗してもNothingを返してくれるので何も考えずにこっちばかり使ってしまいそうです。。。 [ メッセージ編集済み 編集者: さえ 編集日時 2008-11-12 01:45 ] | ||||||||
|
投稿日時: 2008-11-12 08:39
このケースでDirectCastを使うとInvalidCastExceptionが発生するので 使えませんね。 完全にこの型しかありえないと分かっている前提であればDirectCastを使い そうでなければTryCastを使う という方針でいいと思います。 |