2013-06-19 5 views
-1

Динамическое создание и трекбанг в событии, Теперь я хочу, чтобы текстовое поле заполнялось значением трекбара.C# использовать объект до его создания

но как я могу это сделать? так как я получу ошибку, говоря, что динамически созданный трек-бар не существует. который является логикой

Это то, что у меня есть до сих пор.

 TrackBar trackBar = new TrackBar(); 
     trackBar.Name = "TrackbarWidth" + trackbarName++; 
     trackBar.Tag = "dispose"; 
     trackBar.Maximum = 85; 
     trackBar.Minimum = 65; 
     trackBar.SmallChange = 5; 
     trackBar.TickFrequency = 5; 
     trackBar.Value = WidthValue; 
     trackBar.Location = new Point(175, 440 + (50 * trackbarName)); 
     trackBar.Size = new System.Drawing.Size(100, 25); 
     this.Controls.Add(trackBar); 

     TextBox textBox = new TextBox(); 
     textBox.Name = "TrackbarWidth" + TextboxName++; 
     textBox.Text = trackBar.Value.ToString(); 
     textBox.Tag = "dispose"; 
     textBox.Location = new Point(300, 440 + (50 * TextboxName)); 
     textBox.Size = new System.Drawing.Size(30, 25); 
     this.Controls.Add(textBox); 

     lineWidth += 4; 
    } 
#endregion 
} 

private void trackBar1_Scroll(object sender, EventArgs e){ 
    textBox1.Text = trackBar1.Value.ToString(); 
} 

Проблема с этим решением является то, что не может получить доступ к текстовому полю или TrackBar в методе trackBar1_Scroll.

+2

Где инициализируется trackbar1? – Smeegs

+1

Ошибка в событии кнопки trackbar1_scroll. он говорит, что «trackbar1» и «textbox1» не существуют, это правда. поскольку они будут созданы динамично. – user1859829

+0

Трекбард1 инициализируется на listbox.selectedIndexChanged. – user1859829

ответ

1

Самое простое решение здесь для использования использования анонимного обработчика событий, который способен закрывать две необходимые переменные. Включите это сразу после завершения построения текстового поля:

this.Controls.Add(textBox); 
trackBar.Scroll += (s, args) => { 
    textbox.Text = trackbar.Value.ToString(); 
}; 
+0

Спасибо, он работает. все, хотя я не понимаю ни одной из 2-й строки кода :) – user1859829

+1

@ user1859829 Создает новый анонимный метод и добавляет его в качестве обработчика событий для события 'Scroll'. В частности, это называется «Лямбда», если вы заинтересованы в дальнейшем чтении по этому вопросу. – Servy

+0

Спасибо, я скорее понимаю код и смогу воссоздать его самостоятельно. чем просто скопировать его. Большое спасибо! – user1859829

1

sender аргумент всегда контроль, который вызвал событие:

private void trackBar_Scroll(object sender, System.EventArgs e) 
{ 
    // TextBox also dynamic? One way is using ControlCollection.Find 
    textBox1 = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox; 
    if(textBox1 != null) 
     textBox1.Text = trackBar1.Value.ToString(); 
} 

Однако, если вы создаете его динамически вы также должны создать обработчик события:

TrackBar trackBar = new TrackBar(); 
trackBar.Scroll += this.trackBar_Scroll; 
+1

Он до сих пор не сможет получить доступ к текстовому полем, только трекбару. – Servy

+0

Теперь он тоже не знает textbox1, так как он создан динамически. Но я не могу заставить его работать. Добавьте этот «textBox.TextChanged + = this.textBox_TextChanged;» к динамическому текстовому сборщику должно работать правильно? – user1859829

+1

@Servy: О, TextBox также создается динамически? –

Смежные вопросы