#c# #textfield
#c# #текстовое поле
Вопрос:
Я вызываю открытый метод из другого класса. Он принимает список в качестве параметра и просматривает список, выводя каждый элемент в текстовое поле. Проблема в том, что текстовое поле остается пустым!. Я проверил, что список заполняется путем вывода элемента на консоль, прежде чем поместить его в текстовое поле, и текст там отображается нормально.
Список содержит строки и должен выводить каждую строку в текстовое поле, за которым следует точка с запятой.
Это вызываемый метод:
public void fillAttachment(List<string> attachList)
{
for (int i = 0; i < attachList.Count; i )
{
Console.WriteLine("List: " attachList[i]);
txtAttach.Text = attachList[i] ";";
}
}
Комментарии:
1. Я предполагаю, что вы находитесь в потоке пользовательского интерфейса при вызове FillAttachment? В противном случае вы получите исключение. При пошаговом выполнении кода, точка останова на txtAttach … строка, вы видите, как она растет по мере цикла?
2. Попробуйте пропустить цикл for, чтобы убедиться. Просто установите тестовую строку в текстовое поле, это работает? Если это так, попробуйте кэшировать строку, а затем установите ее в текстовое поле. Что-то вроде string tmpString = txtAttach . Текст; затем объедините свои элементы и, наконец, обновите txtAttach. Текст = tmpString;
3. Попытка просто назначить строку текстовому полю также не работает. Тогда, должно быть, проблема с текстовым полем. Есть идеи, что может быть не так?
4. Добавление к чему-либо, что может быть нулевым? Вы уверены, что это правильно? Как говорит @SuperOli, пытаюсь инициировать txtAttach. Сначала свойство текста. Даже с txtAttach.text = String . Пусто;
Ответ №1:
Я бы решил это таким образом:
foreach(var attach in attachList)
{
Console.WriteLine(attach);
txtAttach.AppendText(string.Format("{0};", attach));
}
Ответ №2:
Установка свойства text для текстового поля, и оно не отображается, может быть одним из следующих:
- Вы не смотрите на тот же элемент управления, в котором вы устанавливаете текст
Не могли бы вы создать экземпляр второй копии объекта form, и именно в этой форме вы устанавливаете свойство txtAttach text?
Может ли элемент управления, который вы ожидаете заполнить, быть другим? Щелкните правой кнопкой мыши текстовое поле, в котором вы хотите, чтобы текст отображался, выберите свойства и проверьте имя.
- Что-то еще очищает текстовое поле после его установки
Щелкните правой кнопкой мыши на txtAttach.Введите текст и нажмите «Найти все ссылки», это покажет вам все места, на которые ссылается свойство Text — записанное и прочитанное — в вашем проекте. Это очень полезный способ найти другое взаимодействие с этим элементом управления.
- Fomatting делает текстовое поле пустым
Шрифт слишком маленький или того же цвета, что и фон. Можете ли вы выделить текст в текстовом поле?
Самый простой способ проверить все вышеперечисленное — создать новый текстовый элемент управления в вашей форме с другим именем, изменить свой код для его заполнения, убедиться, что он действительно заполнен, а затем заменить старый.
Кроме того, вы также можете сократить код на одну строку следующим образом:
public void fillAttachment(List<string> attachList)
{
txtAttach.Text = String.Join(";", attachList.ToArray());
}
Хотя это, очевидно, пропускает функцию строки записи в консоли.
Ответ №3:
Не уверен, почему ваше не работает, но я бы сделал это так…
public void fillAttachment(List<string> attachList)
{
string result = "";
//OR (if you want to append to existing textbox data)
//string result = txtAttach.Text;
for (int i = 0; i < attachList.Count; i )
{
Console.WriteLine("List: " attachList[i]);
result = attachList[i] ";";
}
txtAttach.Text = resu<
}
Это работает для вас? Если нет, то есть что-то еще очень неправильное, что не очевидно из вашего кода
Комментарии:
1. К сожалению, это тоже не работает. Даже простое назначение строки прямо в текстовое поле не работает. Не только это текстовое поле, но и попытка отправить текст в одно из других текстовых полей также не работает. Может ли это быть связано с тем фактом, что я вызываю этот метод из другого класса?