Member 12729689 Ответов: 1

Как динамически добавить текстовое поле и суммировать номер текстового поля?


Please tell me how to sum dynamically textbox.
I was able to add textbox dynamically, but I wasn't able to sum.
my textbox dynamically name is "penjualanjumlah"+i;

I want to store total sum in penjualantotal


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace AccBeta_
{
    /// <summary>
    /// Interaction logic for penjualan.xaml
    /// </summary>
    public partial class penjualan : UserControl
    {
        public penjualan()
        {
            InitializeComponent();
            penjualanjumlah.TextChanged += txt_TextChanged;

        }

        private int i;
        private int first;


        private void Button_Click(object sender, RoutedEventArgs e)
        {
            
            TextBox txt = new TextBox();
            var rowDefinition = new RowDefinition();
            rowDefinition.Height = GridLength.Auto;
            grd.RowDefinitions.Add(rowDefinition);

            txt.Height = 40;
            txt.Tag = "Jumlah";
            txt.Name = "penjualanjumlah"+i;
            txt.FontSize = 16;
            txt.Style = (Style)Application.Current.Resources["CW-Inline-TextBox"];
            txt.HorizontalAlignment = HorizontalAlignment.Stretch;
            txt.VerticalContentAlignment = VerticalAlignment.Bottom;
            txt.Margin = new Thickness(25,0,0,10);
            i++;      
            Grid.SetColumn(txt, 0);
            Grid.SetRow(txt, i);
            grd.Children.Add(txt);

            TextBox txt2 = new TextBox();
            var rowDefinition2 = new RowDefinition();
            rowDefinition.Height = GridLength.Auto;


            txt2.Height = 40;
            txt2.FontSize = 16;
            txt2.HorizontalAlignment = HorizontalAlignment.Stretch;
            txt2.VerticalContentAlignment = VerticalAlignment.Bottom;
            txt2.Margin = new Thickness(10,0,30,10);
            
            Grid.SetColumn(txt2, 1);
            Grid.SetRow(txt2, i);
            grd.Children.Add(txt2);
        }

        private void txt_TextChanged(object sender, EventArgs e)
        {
            int.TryParse(penjualanjumlah.Text, out first);
            penjualantotal.Text = (first).ToString();
        }
    }
}


Что я уже пробовал:

пожалуйста, помогите мне, я искал в google, но это не мой случай. я хочу динамически добавлять и динамически суммировать. спасибо

Richard MacCutchan

Считайте текст из текстового поля, преобразуйте его в целое число,плавайте,удваивайте по мере необходимости, добавляйте его к чему угодно, преобразуйте его обратно в строку.

Member 12729689

мой реальный вопрос заключается в том, как это реализовать?
txt.Name = "пенджуаланджумлах"+i;

в такой
пенджуаланджумлах.Очередь textchanged += txt_TextChanged;

и вот так
инт.Метод tryparse(penjualanjumlah.Текст, первым);
пенджуалантотал.Текст = (первый).Метод toString();

Richard MacCutchan

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

Динамически создаваемый объект-это то же самое, что и объект, созданный во время разработки. Вам просто нужно создать ссылку на уровне класса и инициализировать ее при создании объекта.

Member 12729689

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

Richard MacCutchan

Смотрите ниже, комментируемые строки.

Member 12729689

Мне очень жаль. Но сгенерированное текстовое поле все равно не суммируется с penjualantotal. Только первое текстовое поле (не генерируемое щелчком мыши) суммируется с penjualantotal.

Richard MacCutchan

Ну, вам нужно будет сложить несколько чисел вместе, чтобы получить сумму.

Member 12729689

и как это сделать? Я создал скриншот для вас. пожалуйста, проверьте.
извините за мой плохой английский. надеюсь, вы мне поможете.
https://imgur.com/a/ZQMpn

Richard MacCutchan

Получите текст из текстовых полей, содержащих значения.
Преобразуйте каждое значение в целочисленный (или десятичный) тип.
Добавьте значение к общей сумме.
Установите текст в поле итоги равным общему значению.

Я не могу понять, что такого сложного в такой элементарной логике.


Google translation (извините, я не говорю по-индонезийски):

Dapatkan teks dari TextBox yang berisi nilai.
Mengkonversi setiap nilai ke tipe integer (atau Desimal).
Tambahkan Нилай ке всего.
Тетапкан Котак Текс Дари тотал ке Нилай тотал.

Сая тидак менгерти АПА Янг сулит дилакукан сеперти логика дасар.

Member 12729689

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

Я могу получить значение из текстового поля penjualanjumlah (фиксированное), но я не могу получить значение из "penjualanjumlah"+I

общественные penjualan()
{
метод InitializeComponent();
пенджуаланджумлах.Очередь textchanged += txt_TextChanged;
"пенджуаланджумлах"+i.Очередь textchanged += txt_TextChanged;
}
\\и он получает ошибку
\\'int' не содержит определения для 'TextChanged', и ни один метод расширения 'TextChanged', принимающий первый аргумент типа 'int', не может быть найден (отсутствует ли директива using или ссылка на сборку?)

Richard MacCutchan

Этот: "penjualanjumlah"+i.TextChanged += txt_TextChanged; это никогда не сработает. Вы не можете ссылаться на объекты таким образом.
Вам нужно изучить основы C#, прежде чем вы сможете написать такое приложение, и вы не можете изучить его, публикуя вопросы на форумах, подобных этому. Взгляните на это .NET книга ноль Чарльза Петцольда[^] что является отличной отправной точкой.

Member 12729689

Хэй, ты уже упоминал свой ответ раньше, как показать элемент списка?

if (tb.Name.Equals("penjualanjumlah0")). / / или penjualanjumlah1
{


Ящик для сообщений.Шоу("1");

}

он не показывал окно сообщения

Richard MacCutchan

Тогда имя не равно этому значению, но я не могу догадаться, что ваш код делает неправильно.

Member 12729689

Сено. Я обновляю код, и теперь окно сообщения отображается. А теперь проблема есть . Как суммировать все сгенерированные текстовые поля?

инт.Метод tryparse(ТБ.Текст, первым);

пенджуалантотал.Текст = (первый).Метод toString();

Itu просто показывает 1 значение текстового поля

Richard MacCutchan

Не знаю, что еще я могу сказать. Вам нужно зафиксировать значения все текстовые поля и сложите их вместе. Затем выведите итог в поле итог.

Member 12729689

Захват в список пенджуаланцев?

И как код суммировать список?

Richard MacCutchan

итого = результат1 + результат2 + result3;

Member 12729689

Я установил имя динамически. Поэтому каждый раз, когда я нажимаю кнопку, она генерирует текстовое поле с именем penjualan + i;
я++;

Если я использую result1+result2+result3, то это просто текстовое поле sum 3. Я хочу сгенерировать как можно больше текстового поля

Richard MacCutchan

Мне очень жаль, но я понятия не имею, что вы имеете в виду. Я попытался показать вам, как создать динамическое текстовое поле, как получить текст и проанализировать его до значения, как сложить значения вместе, чтобы получить общее значение, и как показать это общее значение в конечном текстовом поле. Я не знаю, что еще я могу предложить, поскольку вы, похоже, испытываете трудности с основами C#.

1 Ответов

Рейтинг:
1

Richard MacCutchan

    public partial class penjualan : UserControl
    {
        List<TextBox> penjualans = new List<TextBox>(); // Add this line


        private void Button_Click(object sender, RoutedEventArgs e)
        {
            
            TextBox txt = new TextBox();
            var rowDefinition = new RowDefinition();
            rowDefinition.Height = GridLength.Auto;
            grd.RowDefinitions.Add(rowDefinition);
 
            txt.Height = 40;
            txt.Tag = "Jumlah";
            txt.Name = "penjualanjumlah"+i;
            txt.FontSize = 16;
            txt.Style = (Style)Application.Current.Resources["CW-Inline-TextBox"];
            txt.HorizontalAlignment = HorizontalAlignment.Stretch;
            txt.VerticalContentAlignment = VerticalAlignment.Bottom;
            txt.Margin = new Thickness(25,0,0,10);
            i++;      
            penjualans.Add(txt);  // save the reference in the List
            Grid.SetColumn(txt, 0);
            Grid.SetRow(txt, i);
            grd.Children.Add(txt);
 
            TextBox txt2 = new TextBox();
            var rowDefinition2 = new RowDefinition();
            rowDefinition.Height = GridLength.Auto;
 

            txt2.Height = 40;
            txt2.FontSize = 16;
            txt2.HorizontalAlignment = HorizontalAlignment.Stretch;
            txt2.VerticalContentAlignment = VerticalAlignment.Bottom;
            txt2.Margin = new Thickness(10,0,30,10);            
            penjualans.Add(txt2);  // save the next reference in the List

            
            Grid.SetColumn(txt2, 1);
            Grid.SetRow(txt2, i);
            grd.Children.Add(txt2);
        }
 
        private void txt_TextChanged(object sender, EventArgs e)
        {
            TextBox tb = sender as TextBox; // get the box that is changing
            // look at its properties to see which one it is
            if (tb.Name.Equals("penjualanjumlah1")) // is it box number 1?
            {
                // do something here
            }
            int.TryParse(penjualanjumlah.Text, out first);
            penjualantotal.Text = (first).ToString();
        }
    }
}