C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: For ~Each


(過去ログ 114 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■67527 / inTopicNo.1)  For ~Each
  
□投稿者/ YM (11回)-(2013/08/07(Wed) 22:15:07)

分類:[VB.NET/VB2005 以降] 


:
Call txt1_TextChanged(Sender , e)
Call txt2_TextChanged(Sender , e)
Call txt2_TextChanged(Sender , e)
:


上記のような処理をループを使ってスッキリとしたコーディングにしたいのですが可能でしょうか?
For Each ctl As Control In Me.Controls
If TypeOf ctl Is TextBox Then
ココのコーディングが解りません
End If
Next

バージョンは、VB.Net 2008
OS Win7

よろしくお願いします。
引用返信 編集キー/
■67528 / inTopicNo.2)  Re[1]: For ~Each
□投稿者/ ザキヤマ (1回)-(2013/08/07(Wed) 22:54:47)
No67527 (YM さん) に返信
>
> :
> Call txt1_TextChanged(Sender , e)
> Call txt2_TextChanged(Sender , e)
> Call txt2_TextChanged(Sender , e)
> :

「txt1_TextChanged(Sender , e)」って、一見イベントハンドラのように思いましたが、
Callするということはどういうことなのでしょうか?
引数のSenderやeには何を割り当てているのでしょうか?
あなたの作成したソースには、本当にこんなコードが書かれているのですか?

それともAddhandlerしたいということですか?
(上のコード例では、そのようには読み取れないのですが)
引用返信 編集キー/
■67529 / inTopicNo.3)  Re[1]: For ~Each
□投稿者/ 魔界の仮面弁士 (297回)-(2013/08/07(Wed) 23:03:26)
2013/08/07(Wed) 23:44:46 編集(投稿者)

No67527 (YM さん) に返信
> Call txt1_TextChanged(Sender , e)
> Call txt2_TextChanged(Sender , e)
> Call txt2_TextChanged(Sender , e)

txt1, txt2, txt3 ではなく、
txt1, txt2, txt2 なのですか?


> 上記のような処理を
これらは本来、TextChanged イベントから呼ばれるために用意されたものですよね。
であれば、それ以外の場所から呼ぶべきではありません。

また、自身で呼びだすにしても、
 txt1_TextChanged(txt1, EventArgs.Empty)
 txt2_TextChanged(txt2, EventArgs.Empty)
のように sender 引数にはイベント発生元のオブジェクトが渡されるべきです。

sender 引数が適切に渡されていないと
 Private Sub txt_TextChanged(…) Handles txt1.TextChanged, txt2.TextChanged
のように、複数のイベントを一つにまとめて使うような場合に、
どのコントロールのイベントが発生しているのかを判断できません。
 

> 上記のような処理をループを使ってスッキリとしたコーディングにしたいのですが可能でしょうか?
TextChanged イベントを発生させる、という目的だけなら
 For Each txt In Me.Controls.OfType(Of TextBox)()
  txt.AppendText(vbNullChar)
 Next
と書けます。あまり良い手法では無いですが…。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -