2017-08-24 4 views
0

私はVisual Studio 2017を使用しています。テキストボックスのあるフォームがあります。これらのテキストボックスは、10秒ごとにリフレッシュする必要があります。これを達成するために、Timerイベントを使用します。EventHandler内のフォームテキストボックスにC#で文字列でアクセスする方法は?

public partial class status_window : Form 
{ 
    public status_window() 
    { 
     InitializeComponent(); 

     shutdown_button.Click += new EventHandler(shutdown_click); 

     Timer timer = new Timer(); 
     timer.Interval = (1 * 10000); // 10 secs 
     timer.Tick += new EventHandler(timer_Tick); 
     timer.Start(); 

    } 
} 

timer_tick関数は、status_windowクラスのメンバーです。そのイベントハンドラーの中で、私は期待どおりの名前でテキストボックスにアクセスできます。しかし、テキストボックス "アドレス"が私の変数である場合、それを行う方法。見てください:

private void timer_Tick(object sender, EventArgs e) 
{ 

    Int32 unixtime = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; 

    // for all boxes per exname 
    for (int i = 0; i < something.Count() ; i++) 
    { 

     // try to find textbox 1 -> embty result 
     Console.WriteLine(this.Controls.Find("nam1_last_event", true)); 
     Console.WriteLine(this.Controls.Find("nam2_last_event", true)); // also empty result 

     // this works and fills the formbox as ecxpected 
     nam1_last_event.Text = "somevalue"; 
     nam1_event_count.Text = "anothervale"; 
     nam2_last_event.Text = "somemorevalue"; 
     nam2_event_count.Text = "andsoon"; 

     // thats what i want later to use my for loop for those: 
     // something[i] exuals to nam1,nam2 and so on 
     this.Controls.Find(String.Format("{0}_last_event", something[i].ToLower()) , true)[0].Text = "somevalue"; // this fails cause array returned by find is empty 
     this.Controls.Find(String.Format("{0}_last_event", ex_name.ToLower()), true)[0].Text = "anothervale"; // same 

    } 

} 

私はここで何とか自分の知識によって制限されていました。 Googleの検索結果のほとんどは、コントロールの検索方法を使用することを提案しています。

答えて

0

これが私の作品:

var inPanel = this.Controls.Find("inPanel", true).OfType<TextBox>().FirstOrDefault(); 
inPanel?.Text = "Found it"; 
+0

これは、 OPが 'IndexOutOfRangeException'の代わりに要素が見つからないときに' NullReferenceException'を投げる以外の方法はありますか? –

+0

NullReferenceExceptionが修正されました。 – Casperah

0

コードでは、という名前をクラスstatus_windowのメンバーとコントロールの名前として使用します。あなたのコントロールリレーが名前nam1_last_eventを持っているかどうかデザイナーでチェックしてください。

機能Controls.FindコントロールのプロパティNameの値であるキーを使用してください。

+0

あなたは、このいずれかを意味しますか? https://www2.pic-upload.de/img/33798040/Unbenannt.png – Steven

+0

これは、デザインモードでは隠されているコントロールの個別のプロパティです。ドキュメントで確認してください。https://msdn.microsoft.com/en-us/library/system.windows.forms.control.name(v=vs.110).aspx – hsd

0

これらのテキストボックスを保存するためのリスト変数またはディクショナリ変数を作成し、timer_Tickで取得します。

関連する問題