Вывести массив в windows forms c

Что использовать для вывода массива? C# Решение и ответ на вопрос 1268773

Прошу не судить строго, в с# новичёк. Проблема с выводом массива (или, возможно, консоли, или пониманием сути..).
Задача — для себя увидеть содержимое массива, любым способом (пока что это проблема)

В MS Visual Studio 2013 выбираю Файл->Создать проект->Приложение Windows Forms

Появляется форма, на неё вставляю кнопку, в которой пишу простейший код:

C#
1
2
3
4
5
6
7
8
        private void button1_Click(object sender, EventArgs e)
        {
            int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
            foreach (int i in numbers)
            {
                System.Console.Write("{0} ", i);
            }
        }

При запуске кода и нажатии на кнопку — ничего не происходит. Консоль не появляется.
(Справедливости ради скажу, что при создании проекта в формате «Консольное приложение» консоль всё же проявляется на долю секунды и исчезает)

Что я делаю не так. Где и как увидеть содержимое массива (или как отобразить) в режиме «Приложение Windows Forms» ?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Лекция
15

22.0. Массивы в
Windows Forms Application

Массивы – это структура данных,
представляющая собой набор переменных
одинакового типа, имеющих общее имя.

Каждый
элемент массива однозначно определяется
именем и индексом (номером элемента в
массиве). Индексы массива принадлежат
целочисленному типу.

Все
элементы массива имеют одинаковый тип.

Используются
при работе с таблицами и списками.

Массив
может быть:


одномерным,


двумерным /многомерным.

Массивы
различают:

  • статические
    и

  • динамические.

В статическом массиве размеры
массива (верхний индекс элементов)
задаются при объявлении массива (размеры
известны до компиляции программы).

Формат
объявления одномерного массива в C#:

тип[
] ИмяМассива = new
тип [размер];

Формат
объявления двумерного массива в C#:

тип
[ , ] ИмяМассива = new
тип [количество строк, количество
столбцов];

Если массив объявлен с инициализацией
глобально в программе, то начальные
значения элементов массива будут
использоваться во всех процедурах и
обработчиках событий. Пример объявления
массива:

// using – раздел
объявления модулей;

using
System.Windows.Forms;

namespace
WindowsFormsApplication1 //пространство
имен приложения

{

public
partial class Form1 : Form // объявление
класса

{

public Form1()
// объявление формы1

{

InitializeComponent();
// объявление компонент на форме

}

// глобальное объявление массивов

int[] А = new int[5]; // одномерный массив
А из 5 целых чисел

double[,] M = new double[2, 3]; // двумерный массив
M[2х3]

string[ ] Team = {«Zenith»,
«Dynamo», «Sparta», «Rotor», «CSK»};
//строковый

double[] F = { 1.5, 2.1, 3.65, 4.7, 5.14, 6.36 }; // F[6]
из 6 вещественных чисел

int[,] D = { { 0, 2, 4, 6 }, { 2, 9, 6, 3 }, { 4, 7, 5, 8 }, { 1, 6,
5, 7 } }; // массив M [4х4]

}

}

// обработчики событий

Элементы
массива, объявленного глобально
можно инициализировать в процедуре
обработчика события, во время работы
программы, например, для массива A из 5
эл.:

private void
button1_Click(object sender, EventArgs e)

{

// инициализация элементов массива
A, объявленного глобально

A[1] = 5;
A[2] = 6; A[3] = 0; A[4] = -5; A[5]
= -10;

}

Локальный массив объявляется в
процедуре обработчика события, и тогда
его как правило инициализируют во время
исполнения этого события. Значения
элементов, как и сам массив известен
только в этой процедуре. При необходимости
работы с массивом его надо заново
объявлять в другом обработчике события
и производить его инициализацию.
Например:

private
void button2_Click(object sender, EventArgs e)

{

int[] B =
new int[10];
// массив B объявлен
локально

for (int k
= 0; k <= 4; k++)
// с инициализацией элементов

B[k] = k;

}

При обращении к элементам массива
заданного локально в другом обработчике
событий, будет выдано сообщение об
ошибке:

В динамическом массиве при объявлении
указывается имя массива, тип его
элементов, а размер массива определяется
при выполнении программы и задается
некой переменной. Значение переменной
можно ввести в процессе диалога программы
с пользователем или используя свойство
length, содержащее количество элементов,
которое может хранить массив. Например:

private void button1_Click(object sender, EventArgs e)

{

int size = int.Parse(textBox1.Text);
//Задание верхней
границы массива

int []
H = new int[size];

………

}

22.1 Операции с массивами в Windows-приложениях

Типовые операции:

  • вывод/ввод
    массива;

  • поиск
    максимального или минимального элемента
    массива;

  • поиск
    заданного элемента массива;

  • сортировка
    массива.

Ввод-Вывод
массивов в
Windows-приложениях

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

Пример. Форма разделена условно на две
части – для ввода и вывода массива.

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

Затем пользователь переходит к вводу
элементов массива. Элемент вводится в
текстовое окно, а командная кнопка
«Ввести элемент» обеспечивает передачу
значения в массив. Корректность ввода
контролируется и на этом этапе.

Для облегчения ввода пользователю
выводится подсказка, какой именно
элемент надо ввести. После ввода элементов
массива окно ввода становится недоступным
для ввода элементов.

В нижней части отображается введенный
массив в форме, удобной для восприятия
пользователя. Для этого пригодны
элементы: ListBox, CheckedListBox,
ComboBox. Как только вводится
очередной элемент, он немедленно
отображается во всех объектах.


ComboBox11

label1

label2

label3

label4

label5

label6

label7

listBox1-
список

checkedListBox1

comboBox1-
комбинированный список


textBox1

button1

textBox2

button2

panel1

panel2

Три объекта вывода элементов массива
приведены для демонстрации, реально их
всех отображать не нужно. Компонент
выбирается по желанию пользователя.


using System;

using
System.Collections.Generic;

using
System.ComponentModel;

using System.Data;

using System.Drawing;

using
System.Linq;

using System.Text;

using
System.Windows.Forms;

namespace
WindowsFormsApplication1

{

public partial
class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

double [] mas;

int i=0;

private void
button1_Click(object sender, EventArgs e)

{

try //охраняемый блок


{

int n = int.Parse(textBox1.Text);

mas =
new double[n];

label4.Text = «mas[ » + 0 + » ]»;

textBox2.ReadOnly = false;

listBox1.Items.Clear();

checkedListBox1.Items.Clear();

comboBox1.Items.Clear();

i = 0;

}

catch //перехватчик исключения и
формирование ошибки

{

MessageBox.Show(«Надо вводить цифры «,
«Ошибочный ввод данных»,
MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

private void
button2_Click(object sender, EventArgs e)

{

int n =
int.Parse(textBox1.Text);

mas = new
double[n];
// задание размера массива

mas[i] = double.Parse(textBox2.Text);


label4.Text = «mas[ » + i + » ]»;

listBox1.Items.Add(mas[i]);

checkedListBox1.Items.Add(mas[i]);

comboBox1.Items.Add(mas[i]);

i++;

textBox2.Text = » «;

label6.Text = «ОК»;

if (i == n)

{

label3.Text = » «;

label4.Text = » «;

label6.Text = «Ввод
не доступен
«;

textBox2.Text = » «;

textBox2.ReadOnly = true;

}

}

}

}

Последовательность чисел удобно вводить
в строку таблицы с помощью компонента
DataGridView (данные строкового
вида).

DataGridView – это таблица,
ячейки которой содержат строки символов.


Столбец

Таблица


Строка

Ячейка


Свойства
DataGridView определяют:

Columns
колонки таблицы

Rows
строки таблицы

Cells ячейки

ColumnCount количество
столбцов таблицы

RowCount количество
строк таблицы

Rows[n].Cells[k]
ячейка, лежащая на пересечении n
— го ряда row и k-ой
столбца

Задача1, 2. Ввести
элементы одномерного
массива и вычислить:

Задача1: суммарное, среднеарифметическое,

Задача2: максимальное и минимальное
значения элементов этого массива.

using System;

using
System.Collections.Generic;

using
System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using
System.Windows.Forms;

namespace
WindowsFormsApplication1

{

public partial
class Form1 : Form

{

public Form1()

{

InitializeComponent();
// объявление компонентов на
Form1

}

double[] K =
new double[5]; // объявление
массива

private void
button1_Click(object sender, EventArgs e) // Задача1

{

double avr = 0;
//среднее значение

double summ = 0; //сумма элементов

int n
= 0;
// количество введенных
элементов

try //охраняемый блок

{

for
(int
i
= 0; i
< 5; i++)
//преобразование данных, вводимых в
1 строку

{
// с клавиатуры в цифровой
эквивалент

K[i]
= System.Convert.ToDouble(dataGridView1.Rows[0].Cells[i].Value);

summ
= summ + K[i];

n= n
+ 1;

}

avr =
summ / n;

label1.Text
= «Сумма
элементов:
» + String.Format(«{0,6:f}», summ);

label2.Text
= «Среднее
арифмет.
значение:
» + String.Format(«{0,6:f3}», avr);

}

catch //перехватчик исключения и
формирование ошибки

{

MessageBox.Show(«Надо вводить цифры «,
«Ошибочный ввод данных»,
MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

private void
button2_Click(object sender, EventArgs e) // Задача2

{

double Kmax
= 0;

double Kmin
= 0;

int Nmx =
0;

int Nmn =
0;

try
//охраняемый
блок

{

for
(int
i
= 0; i
< 5; i++)
//преобразование данных, вводимых в
первую строку

{
//с клавиатуры в цифровой эквивалент

K[i]
= System.Convert.ToDouble(dataGridView1.Rows[0].Cells[i].Value);

}

Kmax =
K[0]; // предположение

Nmx =
0;

for
(int i = 1;
i < 5; i++)

{

if (K[i] > Kmax)

{

Kmax
= K[i]; // выявление
max

Nmx = i;

}

}

Kmin =
K[0]; // предположение

Nmn =
0;

for
(int i =1;
i < 5; i++)

{

if
(K[i] < Kmin)

{

Kmin
= K[i]; // выявление
min

Nmn = i;

}

}

label3.Text
= «Максимальное
значение:
» + String.Format(«{0,6:f1}», Kmax) + «, его
номер:
» + Nmx.ToString();

label4.Text
= «Минимальное
значение:
» + String.Format(«{0,6:f1}», Kmin) + «, его
номер:
» + Nmn.ToString();

}

catch //перехватчик исключения и
формирование ошибки

{

MessageBox.Show(«Надо вводить цифры «,
«Ошибочный ввод данных»,
MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

}

}

0
1 2 3 4

Двумерную
таблицу можно представить как совокупность
одномерных массивов.

Задача
3
. Обработать результаты спортивных
соревнований олимпиады.

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

— за
золотую медаль – 7 баллов,

— за
серебряную медаль – 6 баллов,

— за
бронзовую медаль – 5 баллов,

Устанавливаем на
форму объекты dataGridView1
и button1. Используя свойство
Colomns, создаем коллекцию
столбцов с полями: Страна, Золотых,
Серебряных, Бронзовых, Всего, Баллов


dataGridView

Изменив свойство Name,
переименуем dataGridView в
Tabl.

Количество строк в компоненте
по умолчанию dataGridView
= 1 и для увеличения их численности
необходимо при инициализации элементов
добавить нужное их число через метод
dataGridView.Rows.Add();

public
Form1()

{

InitializeComponent();

Tabl.Rows.Add(8);
//добавление
строк
в
таблицу

}

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

Запуск приложения

При нажатии на кнопку «Итоги» происходит
расчет показателей:

using System;

using
System.Windows.Forms;

namespace
WindowsFormsApplication1

{

public partial
class Form1 : Form

{

public Form1()

{

InitializeComponent();

Tabl.Rows.Add(8);
//добавление
строк
в
таблицу

}

private void
Form1_Activated(object sender, EventArgs e) //при
активизации
формы

{

string[]
Ctrana
= new
string[8]
{ «Австрия», «Великобритания»,
«Германия», «Италия»,

«Россия», «США»,
«Франция», «Япония» };

int[]
Zoloto
= new
int[8]
{ 16, 11, 14, 13, 32, 39, 13, 5 };

int[]
Serebro = new int[8] { 25, 10, 17, 8, 28, 25, 14, 8 };

int[]
Bronza = new int[8] { 17, 7, 28, 13, 28, 33, 11, 5 };

for (int i
= 0; i < 8; i++)

{

Tabl.Rows[i].Cells[0].Value
= Ctrana[i]; // заполнение
элементами
0 столбца

Tabl.Rows[i].Cells[1].Value
= Zoloto[i]; // заполнение
элементами
1 столбца

Tabl.Rows[i].Cells[2].Value
= Serebro[i]; // заполнение
элементами
2 столбца

Tabl.Rows[i].Cells[3].Value
= Bronza[i]; // заполнение
элементами
3 столбца

}

}

private void
button1_Click(object sender, EventArgs e) //кнопка
Итоги

{

int c,r; //номер
колонки и строки Tabl

int s=0; //всего медалей у команды

int b=0; //всего баллов у команды

for (r = 0; r < 8; r++)
//цикл по строкам

{

//вычисление
общего количества медалей

for (c
= 1; c <= 3; c++)

s =
s + System.Convert.ToInt16(Tabl.Rows[r].Cells[c].Value);

//вычисление
общего
количества
баллов

b = 7 *
System.Convert.ToInt16(Tabl.Rows[r].Cells[1].Value) +

6
* System.Convert.ToInt16(Tabl.Rows[r].Cells[2].Value) +

5
* System.Convert.ToInt16(Tabl.Rows[r].Cells[3].Value);

Tabl.Rows[r].Cells[4].Value
= s.ToString(); // всего
медалей
для
каждой
страны

Tabl.Rows[r].Cells[5].Value
= b.ToString(); // всего
баллов
для
каждой
страны

}

}

}

}

Соседние файлы в папке ЛК

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Дата изменения: 7 сентября 2022

Лабораторные работы си шарп. Массивы»

Приложения для Windows forms

Лабораторная работа 10

Выполнить: Создайте проект для подсчета суммы и среднего арифметического значения элементов одномерного массива.

Пример выполнения:

Массивы в VB

Рис. Форма «Массивы»

[Название проекта: Lab10, название файла Lab10.cs]

Выполнение:

  1. Создайте новый проект. Расположите элементы управления на новой форме (см. рисунок).
  2. Задайте свойству Multiline для текстового окна txtArray значение равное true (для того, чтобы в текстовом окне можно было выводить текст в несколько строк).
  3. Далее необходимо запрограммировать кнопку Вычислить (btnCalc) так, чтобы в текстовое окно выводились элементы массива, их сумма, а затем их среднее арифметическое. Для этого в процедуре, описывающей событие щелчка мыши по кнопке Вычислить, опишем переменные, которые мы будем использовать при решении поставленной задачи:
  4. private void btnCalc_Click(object sender, EventArgs e)
            {
                int[] arr = new int[10];
                int sum=0;
            }
  5. Для среднего арифметического специальную переменную описывать не надо, потому что оно вычисляется по формуле sum разделить на 10.
  6. Для того чтобы задать значения элементов массива, воспользуемся циклом. Для генерации случайных чисел будем использовать переменную — экземпляр объекта Random:
  7. Random rand = new Random();
    for(int i=0;i<arr.Length;i++)
    {
         arr[i] = rand.Next(20);
         //...
    }
  8. Добавьте в цикл вычисление суммы элементов массива:
  9. Теперь осталось вывести элементы массива, сумму и среднее арифметическое в текстовое окно.
  10. Сначала выведите слово Массив:
  11. txtArray.Text = "Массив: ";
  12. Теперь в цикле необходимо вывести элементы массива:
  13. for (int i = 0; i < arr.Length; i++)
                {
                    txtArray.Text +=  arr[i].ToString()+" ";
                }
  14. Самостоятельно добавьте вывод в текстовое окно среднего арифметического.
  15. Запустите и отладьте программу.

Дополнительное задание:

  • Разработать приложение, которое находит максимальное и минимальное число из 15 элементов массива.
  • Контрольное задание:

  • Добавьте в приложение возможность сортировки массива по возрастанию.
  • Вопросы для самоконтроля:

    1. Как объявляется массив в VC#?
    2. Сколько элементов будет содержать массив, который описан с помощью следующего оператора:
    3. С помощью какого ключевого слова можно описать массив, который будет доступен всем модулям приложения?

    Есть функция task1() которая возвращает массив, и передает кнопке, которая в свою очередь передает его textBox.

    Кнопка

    #pragma once
    #include <ctime>
    #include <iomanip>
    namespace Lab
    {
            using namespace std;
    
            void initArr(int* arrPtr, const int size)
            {
                    for (int* arrPtrCpy = arrPtr; arrPtrCpy < arrPtr + size; ++arrPtrCpy)
                    {
                            *arrPtrCpy = rand() % 51 - 25;
                    }
            }
    
            /*int printArr(int* arrPtr, const int size)
            {
                    for (int* arrPtrCpy = arrPtr; arrPtrCpy < arrPtr + size; ++arrPtrCpy)
                    {
                            if (arrPtr + size == arrPtrCpy)
                            {
                                    return *arrPtrCpy;
                            }
                            else
                            {
                                    printArr(arrPtr, size);
                            }
                    }
    
            }*/
    
            bool isElementExists(const int* arrPtr, const int size, const int item)
            {
                    bool isExists = false;
    
                    for (const int* arrPtrCpy = arrPtr; arrPtrCpy < arrPtr + size; ++arrPtrCpy)
                    {
                            if (*arrPtrCpy == item)
                            {
                                    isExists = true;
                                    break;
                            }
                    }
                    return isExists;
            }
    
            bool isElementExists(const int* arrPtr, const int* endArrPtr, const int item)
            {
                    bool isExists = false;
    
                    for (const int* arrPtrCpy = arrPtr; arrPtrCpy < endArrPtr; ++arrPtrCpy)
                    {
                            if (*arrPtrCpy == item)
                            {
                                    isExists = true;
                                    break;
                            }
                    }
                    return isExists;
            }
    
            int conver(int arrPtr, const int size, int &mass)
            {
    
                    for (int i=0;i<size;i++)
                    {
                            *mass[i] = *arrPtr[i]-48;
                    }
    
            }
    
    
            int task1()
            {
                    int sizeA = 5;
                    int sizeB = 5;
    
                    int* arrAPtr = new int[sizeA];
                    initArr(arrAPtr, sizeA);
                    int* arrBPtr = new int[sizeB];
                    initArr(arrBPtr, sizeB);
    
                    //printArr(arrAPtr, sizeA);
                    //printArr(arrBPtr, sizeB);
    
                    int sizeC = 0;
                    for (int* arrAPtrCpy = arrAPtr; arrAPtrCpy < arrAPtr + sizeA; ++arrAPtrCpy)
                    {
                            if (!isElementExists(arrAPtr, arrAPtrCpy, *arrAPtrCpy) && !isElementExists(arrBPtr, sizeB, *arrAPtrCpy))
                            {
                                    ++sizeC;
                            }
                    }
                    int* arrCPtr = new int[sizeC];
                    for (int* arrAPtrCpy = arrAPtr, *arrCPtrCpy = arrCPtr; arrAPtrCpy < arrAPtr + sizeA; ++arrAPtrCpy)
                    {
                            if (!isElementExists(arrAPtr, arrAPtrCpy, *arrAPtrCpy) && !isElementExists(arrBPtr, sizeB, *arrAPtrCpy))
                            {
                                    *arrCPtrCpy = *arrAPtrCpy;
                                    ++arrCPtrCpy;
                            }
                    }
    
                    char *mass= new char [sizeC];
                    delete[] arrAPtr;
                    delete[] arrBPtr;
    
                    return arrCPtr;
    
    
                    delete[] arrCPtr;
    
            }
    
    
    
    }
    

    В данный момент у меня выводится первый элемент массива.

    Вопрос: как мне вывести весь массив?

    Так как на курсах нам еще не говорили что такое ООП и классы. Мне надо просто шаблон.

    Хочу преподу домашку отправлять в нормальном виде, а не по 10 разных сорс файлов.

    Есть структура:

    struct birthday
    {
    	int year;
    	int month;
    	int day;
    };
    struct baseProgr
    {
    	char surname[30];
    	char name[30];
    	char sex[10];
    	birthday birth;
    	char mobile[20];
    };

    Дальше читаю с файла и т.д

    private: auto ch_kol() {
        baseProgr base[max];
        return &base;

    private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
    		auto *base = ch_kol();
    		textBox1->Text = gcnew String(base[ind]->surname);
    		textBox2->Text = gcnew String(base[ind]->name);
    		textBox3->Text = gcnew String(base[ind]->sex);
    		textBox5->Text = gcnew String(base[ind]->mobile);
    		cout << "Month = " << base[ind]->birth.month;
    		string year = to_string(base[ind]->birth.year);
    		string month = to_string(base[ind]->birth.month);
    		string day = to_string(base[ind]->birth.day);
    		string dat = year + '.' + month + '.' + day;
    		textBox4->Text = gcnew String(dat.c_str());
    	}

    Всё выводит нормально кроме base[ind]->birth.month base[ind]->birth.day base[ind]->birth.year
    Вместо этого выводит рандомные числа.
    Как исправить?


    • Вопрос задан

      более года назад

    • 263 просмотра

    base[ind].birth.month
    Вообще и остальные поля нужно выводить через точку.
    Кроме того, если приведенный код ch_kol() — это реально все что есть в функции, то это не верно. Вы в ch_kol возвращаете указатель на локальную переменную, как только отработает return этот указатель станет не действиетльным, т.к. массив base перестанет существовать после выхода из функции.
    Подобное определение массива baseProgr base[max];, если max не константа приводит к объявлению массива переменной длины (VLA). Строго говоря С++ не поддерживает VLA, т.к. это фишка Си. Но некоторые компиляторы (gcc) при включенных расширениях (по умолчанию включено) позволяют их использовать. Но этот код становится не переносимым, т.к. при других опциях компилятора или на другом компиляторе код может не собраться.

    auto ch_kol() {
        baseProgr base[max];
        return &base;

    Вы тут возвращаете адрес локальной переменной. Так делать нельзя. При выходе из функции локальная переменная перестает существовать и у вас указатель на фигню остается.

    Переменная должна быть глобальная, частью класса или выделятся через new.

    Пригласить эксперта


    • Показать ещё
      Загружается…

    05 февр. 2023, в 21:58

    2000 руб./за проект

    05 февр. 2023, в 21:43

    2000 руб./за проект

    05 февр. 2023, в 21:04

    500000 руб./за проект

    Минуточку внимания

    Понравилась статья? Поделить с друзьями:
  • Выделить область для скрина горячие клавиши windows
  • Вывести все ip адреса сети windows
  • Выбивает синий экран при установке windows 7
  • Выделите цветом лицензионные программные продукты операционная система windows хр
  • Вывести fps на экран windows 10