Здравствуйте, я только учусь c# и много еще не знаю, пожалуйста помогите =). Ниже приведенный код не работает так как задумано. Стоит задача вводить в первый текстбокс имена, по кнопке заносить их в список, а по нажатию на вторую кнопку показывать все элементы списка, но по какой-то причине показывается только последнее введенное слово. Подскажите в чем проблема. Спасибо.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Calc calc;
class Calc
{
public string text;
public List temp = new List();
public Calc(string str)
{
text = str;
}
}
private void button1_Click(object sender, EventArgs e)
{
calc = new Calc(textBox1.Text);
calc.temp.Add(calc.text);
textBox1.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
foreach(string c in calc.temp)
{
textBox2.Text = c + "\r\n";
}
}
}
}
Другие языки программирования и технологии
Некорректно работает код. (C#)
Во-первых
Класс List - это обобщение. Находится в пространстве сборки System.Collections.Generic.
При создании таких классов используют следующий синтаксис:
Класс<тип> экзКласса, то есть в вашем случае List<тип> temp. Где тип - string
Это означает, что вы создаете список определенного типа.
Хотя, возможно, изначально у вас было так и написано в коде, а mail воспринял это как тег
Во-вторых, тут ошибка, на которую указал Александр. Хотя, я бы тут с ним не согласился.
Дело в том, что у вас так код написан, что его нужно переписывать. Если вы перенесете в конструктор, то проблема не решится. Короче.. лучше скину правильный вариант
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List calc = new List();
private void button1_Click(object sender, EventArgs e)
{
calc.Add(textBox1.Text);
textBox1.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
foreach (string t in calc)
{
textBox2.Text += t + "\r\n";
}
}
}
}
Если вы хотите использовать этот вложенный класс.. то можно записать так
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Calc calc = new Calc();
class Calc
{
public List temp = new List();
}
private void button1_Click(object sender, EventArgs e)
{
calc.temp.Add(textBox1.Text);
textBox1.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
foreach (string t in calc.temp)
{
textBox2.Text += t + "\r\n";
}
}
}
Ну вообще так лучше не писать, потому что это неправильно и неуважительно к программисту, который будет после вас работать с этим кодом (это на будущее). Порекомендовал бы вам почитать про паттерны проектирования, а ещё почитали бы Кнута "Искусство программирования"
Класс List - это обобщение. Находится в пространстве сборки System.Collections.Generic.
При создании таких классов используют следующий синтаксис:
Класс<тип> экзКласса, то есть в вашем случае List<тип> temp. Где тип - string
Это означает, что вы создаете список определенного типа.
Хотя, возможно, изначально у вас было так и написано в коде, а mail воспринял это как тег
Во-вторых, тут ошибка, на которую указал Александр. Хотя, я бы тут с ним не согласился.
Дело в том, что у вас так код написан, что его нужно переписывать. Если вы перенесете в конструктор, то проблема не решится. Короче.. лучше скину правильный вариант
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List calc = new List();
private void button1_Click(object sender, EventArgs e)
{
calc.Add(textBox1.Text);
textBox1.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
foreach (string t in calc)
{
textBox2.Text += t + "\r\n";
}
}
}
}
Если вы хотите использовать этот вложенный класс.. то можно записать так
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Calc calc = new Calc();
class Calc
{
public List temp = new List();
}
private void button1_Click(object sender, EventArgs e)
{
calc.temp.Add(textBox1.Text);
textBox1.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
foreach (string t in calc.temp)
{
textBox2.Text += t + "\r\n";
}
}
}
Ну вообще так лучше не писать, потому что это неправильно и неуважительно к программисту, который будет после вас работать с этим кодом (это на будущее). Порекомендовал бы вам почитать про паттерны проектирования, а ещё почитали бы Кнута "Искусство программирования"
Колягин Леонид
Спасибо большое, Ваш код работает =)
textBox2.Text = c + "\r\n"; - Тут ты тоже поочередно меняешь текст в цикле - последнее значение остается, да.
Ну так и чего-ты удивляешься. На вот эту строчку calc = new Calc(textBox1.Text); обрати внимание. Ты каждый раз по кнопке создаешь новый объект типа Calc. Помести создание объекта Calc в конструктор формы и проблема решиться.
есть рабочий проект напиши куда отправить
Колягин Леонид
cryptoscypher@gmail.com
Похожие вопросы
- Помогите, лёгкий код C++
- Пожалуйста помогите разобраться с даним кодом C++. Тема : Односвязание списки
- Для чего служит код C++? Или какие коды должен знать уверенный программист.
- Не работает конструктор в коде C++!
- Как в этом коде C++ в файл через каждые две буквы добавить цифру любую? За ранее огромное спасибо
- помогите закончить код C++
- heloword не запускается!? вопрос внутри!и код C+ builder! программа на С!
- Как грамотно комментировать код C/C++. Есть ли какие нибудь стили или стандарты?
- дополнение кода c++ sfml
- Код c++ выдает ошибку