2014-01-22 4 views
1

Я допустил ошибку при повторном создании колеса. Есть варианты , но почему-то мне нравится ощущение этого. Извините, но не хватает репутации для публикации изображения. Форма выглядит следующим образом:C# окна формы приложения динамические объекты значение

SNO .------- ITEMS -------- FROM -------- TO --------- КОЛИЧЕСТВО // этикетки

[1] ------- [----------- ▼] --- [--------] ---- [ --------] ------ [-------------] {NEW} {DELETE} // текстовые поля и кнопки

У меня есть «новое» событие нажатия кнопки для генерации строки, а серийный номер - автоматический и вставка элементов в коллекции из панели «Свойства». Кнопка удаления удаляет всю строку и сдвигает обе кнопку вверх по позиции Y.

мне нужно присвоить значение величины [(TO - ОТ) + 1] в количестве текстовых полей, , для которого у меня есть код, как:

public void print_quant(object Sender, EventArgs e) 
    { 
     TextBox quanty; 
     quanty = (TextBox)this.Controls.Find("QUANTITY" + (count), true)[0]; 
     calculate_quant(this, e); 
     quanty = result; 

    } 
    public static string result; 
    public string calculate_quant(object sender, EventArgs e) 
    { 
     TextBox sfrom; 
     sfrom = (TextBox)this.Controls.Find("SFRM" + count, true)[0]; 

     TextBox sto; 
     sto = (TextBox)this.Controls.Find("STO" + count, true)[0]; 

     TextBox quan; 
     quan = (TextBox)this.Controls.Find("QUANTITY" + count, true)[0]; 

      //if (!string.IsNullOrEmpty(sfrom.Text) && !string.IsNullOrEmpty(sto.Text)) 
      { 
       int to = Convert.ToInt32(sto.Text); 
       int from = Convert.ToInt32(sfrom.Text); 
       int quantity = (to - from) + 1; 
       result = quantity.ToString(); 
       quan.Text = result; 
      } 
     return result;    
    } 

счетчик инициализируется на 1 по форме нагрузка, продолжает увеличиваться с количеством строк

тот же код работает в методе удаления строки

public void delete_row(object sender, EventArgs e) //function to delete a row 
    { 
     TextBox snum; 
     snum = (TextBox)this.Controls.Find("SNO"+count, true)[0]; 
     snum.Dispose(); 
...//delete other row elements 
} 

пожалуйста, помогите мне понять, почему он не работает для т он print_quant/calculate_quant методы

+0

Вы не изобретать колесо, вы изобрели квадратное колесо. Есть так много других лучших способов сделать это, вы можете пересмотреть переписывание. Вам придется поместить разрыв строки в ваш метод расчета и посмотреть, что происходит на самом деле. В конце у вас есть результат = .... что это такое? у вас должен быть quan.Text = result; после этого –

+0

Также ваш метод печати фактически ничего не делает. все, что он делает, это запустить метод calculate_quant ... который, не делает ничего другого, затем назначает добавление к переменной «результат». –

+0

Извините, я как-то пропустил это, у меня есть quan.Text = result; в моем коде. result = quantity.ToString() преобразуется в строку, так что textbox.text может принимать значение –

ответ

0

Я внесла некоторые изменения в ваш код. Я изменил отдачу от метода рассчитайте в строку, и добавил quanty.Text = calculatemethod строку в метод печати

public void print_quant(object Sender, EventArgs e) 
    { 
     TextBox quanty; 
     quanty = (TextBox)this.Controls.Find("QUANTITY" + (count), true)[0]; 
     //add this line 
     quanty.Text = calculate_quant(this, e).ToString(); 
    } 
    public static string result; 

    //change this 
    //public void calculate_quant(object sender, EventArgs e) 
    //to 
    public string calculate_quant(object sender, EventArgs e) 
    { 
     TextBox sfrom; 
     sfrom = (TextBox)this.Controls.Find("SFRM" + count, true)[0]; 

     TextBox sto; 
     sto = (TextBox)this.Controls.Find("STO" + count, true)[0]; 

     //this isn't being used here 
     //TextBox quan; 
     //quan = (TextBox)this.Controls.Find("QUANTITY" + count, true)[0]; 

     //if (!string.IsNullOrEmpty(sfrom.Text) && !string.IsNullOrEmpty(sto.Text)) 
     { 
      int to = Convert.ToInt32(sto.Text); 
      int from = Convert.ToInt32(sfrom.Text); 
      int quantity = (to - from) + 1; 
      return quantity.ToString(); 

     } 

    } 

Edit попробовать это.

Создайте usercontrol и сделайте его похожим на одну из ваших строк.

добавить переменные свойства для каждого из коробок

//whenever you Sno="something" the textbox will automatically be updated. 

private string _Sno="00000"; 
public string Sno{get{return _Sno;}set{_sno=value; SnoTextBox.Text=value;}} 

сделать это для каждого из текстовых полей.

в вашей основной форме теперь вы можете добавить flowpanel, они немного сложны вначале. когда вы добавляете к нему новый Usercontrol, они будут автоматически добавляться сверху вниз или вверх или, тем не менее, вы его настроили.

Если вы хотите добавить новую строку, просто добавить новый UserControl в FlowPanel

FlowPanel flowPanel =new FlowPanel(); 

FlowPanel.Controls.Add(new myUserControl()); 

удалить

FlowPanel.Controls.RemoveAt(2); 

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

+0

Thanx, я сделал исправление в своем коде, но он все еще ничего не отображает в поле «количество» –

+0

Я не уверен в результате этой строки реализует 'TextBox sfrom; sfrom = (TextBox) this.Controls.Find ("SFRM" + count, true) [0]; 'что является вторым аргументом (true) и [0] for? Поскольку он работал для поиска элементов строки для моей функции удаления, я использовал тот же код, чтобы найти текстовые поля и их значения –

+0

?? это ваш код. Я считаю, что вы получаете текстовое свойство TextBox SFRM (count). Я бы хотел, чтобы у меня было значительно больше времени, чтобы помочь вам здесь, это действительно так просто, что вы это делаете. У меня просто нет времени прямо сейчас, я надеюсь, что кто-то еще может вам помочь –

0

это работало для меня

private void textBox_TextChanged(object sender, EventArgs e) 
    { 

     TextBox quant; 
     int x = count - 1; 
     string num = Convert.ToString(x); 
     quant = (TextBox)this.Controls.Find("QUANTITY" + x , true)[0]; 
     TextBox to = (TextBox)this.Controls.Find("STO" + x, true)[0]; 
     TextBox from = (TextBox)this.Controls.Find("SFRM" + x, true)[0]; 
     string tovalue = to.Text; 
     int to1 = Convert.ToInt32(tovalue); 
     string fromvalue = from.Text; 
     int from1 = Convert.ToInt32(fromvalue); 
     int result = (to1 - from1) + 1 ; 
     if (result > 0) 
     { 
      string result1 = Convert.ToString(result); 
      quant.Text = result1; 
     } 

    } 

после добавления

STO.TextChanged += new System.EventHandler(textBox_TextChanged); 

на функции, которая генерирующая коробки, где я, необходимой для расчета :)

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