Только 1 текстовое поле будет заполнено параметрами, переданными из другой формы. Почему? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть форма frmControlSystem , которая подключается к внешнему источнику данных, из которого я получаю строки, go в массив. Эта форма открывает другую форму frmResult_Vote для отображения этой информации. 2-й форме передается строковый массив в качестве параметра вместе с целым числом количества отображаемых элементов и одним другим параметром. Эта 2-ая форма правильно активирует .Visible для нужных текстовых полей. но только первый текстовый блок будет фактически отображать текст в нем; остальные пустые.

Первая форма использует этот код для отображения 2-й формы:

frmResult_Vote results = new frmResult_Vote(memberDisplayName, iMemberQty, ConstMembersPlusOne);
results.Show()

Вторая форма создает массив текстовых полей, поэтому я могу l oop и сделать видимым только те, которые я хочу использовать, а также заполнение атрибута .Text. Этот код:

public frmResult_Vote(string[] myVoteMembers, int iMemberQty, int ConstMembersPlusOne)
        {
            InitializeComponent();
            textBox1.Text = "FU";

            TextBox[] memberTextBoxes = new TextBox[ConstMembersPlusOne];

            memberTextBoxes[1] = txtDisplayName1; memberTextBoxes[2] = txtDisplayName2; memberTextBoxes[3] = txtDisplayName3; memberTextBoxes[4] = txtDisplayName4;
            memberTextBoxes[5] = txtDisplayName5; memberTextBoxes[6] = txtDisplayName6; memberTextBoxes[7] = txtDisplayName7; memberTextBoxes[8] = txtDisplayName8;
            memberTextBoxes[9] = txtDisplayName9; memberTextBoxes[10] = txtDisplayName10; memberTextBoxes[11] = txtDisplayName11; memberTextBoxes[12] = txtDisplayName12;

            for (int i = 1; i <= iMemberQty; i++)
            {
                memberTextBoxes[i].Text = myVoteMembers[i];
                memberTextBoxes[i].Visible = true;
            }            
        }

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

Вторая форма содержит 12 текстовых блоков. с именем txtDisplayName1 через txtDisplayName12. Это то, что я использую для заполнения массива TextBox.

Последние странности (по крайней мере, для меня): каждый другой текстовый блок во второй форме был нарисован с другим BackColor. Это никогда не показывает, когда первая форма показывает () вторую форму; все они отображаются белым цветом.

Пытаясь получить что-то для отображения в других текстовых полях, я также пытался специально вызывать имена, не являющиеся массивами, например:

txtDisplayName1.Text = myVoteMembers[1];

Это вообще ничего не делало.

Я также поместил случайный текстовый блок во вторую форму и попытался заполнить его следующей строкой:

textBox1.Text = "FU";

, что textBox также не заполняется ... но если я закомментирую для l oop, это назначение textBox1.Text будет работать. Он также вызывается раньше всего.

Я проверил, что в массиве myVoteMembers есть строки, и когда я перебираю код, я вижу, что здесь происходит присвоение:

memberTextBoxes[i].Text = myVoteMembers[i];

Чего мне здесь не хватает?

1 Ответ

0 голосов
/ 18 февраля 2020

У вас есть исключение - возможно, здесь:

for (int i = 1; i <= iMemberQty; i++)
{
     memberTextBoxes[i].Text = myVoteMembers[i];
     memberTextBoxes[i].Visible = true;
} 

Массив myVoteMembers будет начинаться с 0 и иметь количество элементов iMemberQty. Что означает 0-iMemberQty-1 индексы. Пока вы обращаетесь к индексу iMemberQty, который выбрасывает индекс из-за исключительного исключения

...