Discussion:
Textに表示されている内容の一括消去
(too old to reply)
當山 正一
2005-03-23 02:17:02 UTC
Permalink
一つのフォーム画面にあるTextの入力内容を
一括して消去する場合はどのようにしてやるのでしょうか?
VBであれば下のように出来るのですが、C#はどうでしょうか?

Dim ctl As Control
If (MsgBox(clearDisp, vbOKCancel, dispTitle) = vbCancel) Then GoTo E_sub
'----- 画面の表示内容全て消去
On Error Resume Next
'このフォーム内のすべてのコントロールの表示を消去
For Each ctl In Forms(CurrentForm).Controls
ctl.Value = Null
Next ctl

宜しくお願いします。
Shozo Arai
2005-03-23 05:22:48 UTC
Permalink
荒井です。
Post by 當山 正一
'このフォーム内のすべてのコントロールの表示を消去
For Each ctl In Forms(CurrentForm).Controls
ctl.Value = Null
Next ctl
foreach ( control ctl in this.Controls
{
ctl.Text = null;
}
かな。
でも、Formsコレクションとか、CurrentFormプロパティ?とかってありましたか?
あ��
unknown
2005-03-23 10:47:02 UTC
Permalink
早速ありがとうございます。
下のやり方で消去できました。
でも、ついでにGroupBoxの表題が消えて、
GroupBox内のコントロールのTextは消えないという状況に
なりました。ちょっとここら辺は検証中です。

FormsコレクションやCurrentControlというのは
手元にあるVS2003資料を見る限りだと無いです。
それに変わるものはあるはずなので探してみます。
Post by Shozo Arai
荒井です。
foreach ( control ctl in this.Controls
{
ctl.Text = null;
}
かな。
でも、Formsコレクションとか、CurrentFormプロパティ?とかってありましたか?
あと、Valueプロパティも
unknown
2005-03-29 13:37:02 UTC
Permalink
當山です。ご教授ありがとうございます。

教えて頂いたプログラムだとGroupBox内のTextBoxまでは
消えなかったので、ググってみました。
↓こんなところを参考にしてみました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html

やってみたコードはこんな感じです。↓

void btnClearClick(object sender, System.EventArgs e)
{
Control[] all = GetAllControls(this);
foreach (Control c in all)
{
if (c is TextBox || c is ComboBox)
{
c.Text = null;
}
}
}

//btnClearClickから呼び出される
public Control[] GetAllControls(Control top)
{
ArrayList buf = new ArrayList();
foreach (Control c in top.Controls)
{
buf.Add(c);
buf.AddRange(GetAllControls(c));
}
return (Control[])buf.ToArray(typeof(Control));
}
Shozo Arai
2005-03-30 06:42:48 UTC
Permalink
荒井です。

目的が達成できたようで何よりです。
Post by unknown
やってみたコードはこんな感じです。↓
前回、投稿した私のコードもほぼ同じだと思いますが。
グループボックス等の他のコントロールのコンテナになる場合は、
含まれているコントロールをControlsコレクションで列挙していますので。
但し、この部分は再帰呼び出し(自分で自分を呼び出す)で行っていますので
注意しましょう。
もっとも、本当に全てのコントロールのTextプロパティを消して良いかどうか
という問題もあるでしょう

Loading...