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

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

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

Re[2]: C# 規則性あるテキストボックスを動的に操作したい


(過去ログ 139 を表示中)

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

■81685 / inTopicNo.1)  C# 規則性あるテキストボックスを動的に操作したい
  
□投稿者/ いちたろう (1回)-(2016/10/27(Thu) 20:11:23)

分類:[C#] 

Microsoft Visual C# 2015を使用しています。

tex_s0.Text
tex_s1.Text
tex_s2.Text
tex_s3.Text

というテキストボックスに同一内容の文字列を書き込みたい

イメージとしては
for (int i = 0; i <= 10; i++)
{
tex_s5[i].Text = "a";
}
と考えたのですが「テキストボックス型の式に・・・」エラーが出ます。



引用返信 編集キー/
■81686 / inTopicNo.2)  Re[1]: C# 規則性あるテキストボックスを動的に操作したい
□投稿者/ WebSurfer (1054回)-(2016/10/27(Thu) 20:28:06)
No81685 (いちたろう さん) に返信

> tex_s5[i].Text = "a";

tex_s5 というのは何ですか? テキストボックスへの参照の配列とか
コレクション(List<TestBox> とか)ではないのですか?
引用返信 編集キー/
■81687 / inTopicNo.3)  Re[2]: C# 規則性あるテキストボックスを動的に操作したい
□投稿者/ いちたろう (2回)-(2016/10/27(Thu) 20:43:04)
誤 tex_s5[i].Text = "a";
正 tex_s[i].Text = "a"; 

です。配列とかコレクションではありません。

tex_s1.Text="a;"
tex_s2.Text="a;"

と書くのが面倒だったのでfor文で「1,2・・」の部分をiで代用できないか考えてました。説明不足ですいませんでした。

また同じような感じでbuttonも操作したいのでできればfor文を使用したいです。





引用返信 編集キー/
■81688 / inTopicNo.4)  Re[3]: C# 規則性あるテキストボックスを動的に操作したい
□投稿者/ WebSurfer (1055回)-(2016/10/27(Thu) 21:11:43)
No81687 (いちたろう さん) に返信
> 誤 tex_s5[i].Text = "a";
> 正 tex_s[i].Text = "a"; 
>
> です。配列とかコレクションではありません。

では、test_s を複数(質問者さんの例では 0 〜 3 の 4 つ)の TextBox オブジェクト
への参照のコレクションまたは配列にしてみたらいかがですか?

たぶん、上記の意味が分からないと思いますが、少し考えてみてください。それでも分
からなければ、またここで聞いてください。
引用返信 編集キー/
■81689 / inTopicNo.5)  Re[3]: C# 規則性あるテキストボックスを動的に操作したい
□投稿者/ もりお (26回)-(2016/10/27(Thu) 22:57:01)
2016/10/27(Thu) 23:04:04 編集(投稿者)
No81687 (いちたろう さん) に返信

正規表現で規則を書いてコントロールを列挙するなんてのはどうでしょうか

var pattern = new System.Text.RegularExpressions.Regex("tex_s[0-5]");

var textBoxs = Controls.OfType<TextBox>()
    .Where(textBox => pattern.IsMatch(textBox.Name));

foreach (var textBox in textBoxs)
{
    textBox.Text = "a";
}

引用返信 編集キー/
■81690 / inTopicNo.6)  Re[1]: C# 規則性あるテキストボックスを動的に操作したい
□投稿者/ shu (932回)-(2016/10/28(Fri) 08:15:49)
No81685 (いちたろう さん) に返信

このように配列化すると処理しやすいです。

    public partial class Form1 : Form
    {
        private Button[] _Buttons;

        public Form1()
        {
            InitializeComponent();
            _Buttons = new Button[] {button1,button2,button3,button4,button5};
        }

        private void button6_Click(object sender, EventArgs e)
        {
            foreach(var btn in _Buttons)
            {
                btn.Text = "a";
            }
        }
    }


既に回答のついているControlsについてはFormに直接張り付いているコントロールしか
探せないので、たとえばPanelに張り付いているコントロールならpanel1.Controlsを
使う必要があります。

引用返信 編集キー/
■81693 / inTopicNo.7)  Re[2]: C# 規則性あるテキストボックスを動的に操作したい
□投稿者/ 魔界の仮面弁士 (933回)-(2016/10/28(Fri) 09:54:07)
No81690 (shu さん) に返信
> このように配列化すると処理しやすいです。

コントロール数が多く、名前で検索した方が都合が良い場合も、
ロード時に配列にしておくことで、次回以降の列挙が楽になりますね。


> たとえばPanelに張り付いているコントロールならpanel1.Controlsを
> 使う必要があります。

平坦化する拡張メソッドを使っておくのがお奨めです。

using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

public static class ControlExtensions
{
  public static IEnumerable<Control> GetAllChildren(this Control ctrl)
  {
    var ctrls = ctrl.Controls.OfType<Control>();
    return ctrls.Concat(ctrls.SelectMany(GetAllChildren));
  }
}



たとえばフォームの階層構造が

form1
├panel1
│├panel2
││├radioButton1
││├radioButton2
││└radioButton3
│├textBox1
│└button1
├textBox2
└button2

だった場合、Controls プロパティですと

 foreach (Control ctrl in this.Controls)
  → panel1, textBox2, button2 が列挙される

 foreach (Control ctrl in this.panel1.Controls)
  → panel2, textBox1, button1 が列挙される

のように、その直下のコントロールしか列挙されませんが、
上記の GetAllChildren 拡張メソッドを用意しておくことで、
子孫コントロールも含めて列挙されるようになります。

 foreach (Control ctrl in this.GetAllChildren())
  → panel1, panel2, textBox1, textBox2, button1, button2, radioButton1, radioButton2, radioButton3

 foreach (Control ctrl in this.panel1.GetAllChildren())
  → panel2, textBox1, button1, radioButton1, radioButton2, radioButton3
引用返信 編集キー/
■81696 / inTopicNo.8)  Re[1]: C# 規則性あるテキストボックスを動的に操作したい
□投稿者/ ぽぴ王子 (39回)-(2016/10/28(Fri) 13:55:11)
ぽぴ王子 さんの Web サイト
念のため共有しておきますね。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11166111846
引用返信 編集キー/
■81703 / inTopicNo.9)  Re[2]: C# 規則性あるテキストボックスを動的に操作したい
□投稿者/ いちたろう (3回)-(2016/10/28(Fri) 20:46:20)
No81696 (ぽぴ王子 さん) に返信
> 念のため共有しておきますね。
>
> http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11166111846
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -