Как сделать таблицу в c
Перейти к содержимому

Как сделать таблицу в c

Создание собственного элемента на примере таблицы на C# для Windows Form

В данной статье я опишу создания своих элементов для C# Windows Form.

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

Для написания будем использовать .Net FrameWork 4.7.x, среда разработки Visual Studio 2019.

В первую очередь создадим обычный проект Windows Form. Думаю не нужно это показывать. А уже потом создаем проект «Библиотека элементов управления Windows Form»(Назовем его CustomControl).

Далее у нас будет создан файл UserControl.cs. Удаляем его и создаем обычный класс TableCustoms.cs.Наш класс будет наследоваться от класса Control.

Далее в этом же файле создадим еще несколько классов, а именно:Column,Row,Cell. Рассмотрим каждый по отдельности. Начнем с Column:

Класс Cell(Для поддержки копирования добавляем интерфейс ICloneable):

Теперь настроим наш основной класс TableCustoms:

Для того, чтобы у нас были полосы прокрутки нужно использовать ScrollableControl, поэтому создадим класс PanelTable наследуем ScrollableControl и помещаем его на Control(в следующем уроке объясню почему создаем два разных контрола, а не используем сразу ScrollableControl):

После этого «Пересобираем проект» элемента и добавляем элемент на форму(в основном проекте):

Как сделать таблицу в c

БлогNot. Visual C++: табличные компоненты и работа с ними

Visual C++: табличные компоненты и работа с ними

В этой статье мы рассмотрим на простых примерах основные приёмы работы с табличными компонентами .NET, среда для выполнения кода — Visual C++ (Studio) Express 2010 или выше.

Пример 1. Пишем приложение TableEditor1 для редактирования таблицы и сохранения её в формате XML.

На форму добавим компоненту dataGridView1 , а объекты DataTable и DataSet создадим программно.

Для этого опишем глобально в классе формы следующие величины:

На загрузку формы реализуем такой код (обработчик события Load ):

Перед закрытием формы выполним следующий код (обработчик события FormClosing ):

Данные сохраняются в формате XML.

DataSet представляет собой кэш данных, расположенный в оперативной памяти. DataSet состоит из коллекции объектов класса DataTable .

Доступ к ячейкам таблицы можно получить, используя свойства класса DataTable ( Rows , Cols , Item ) — но запись поля таблицы в файл может быть некорректной из-за того, что технология ADO.NET предусматривает кэширование данных.

Пример такого кода:

Поэтому следует пользоваться методами объекта DataSet .

Пример 2. Пишем проект TableEditor2 для связанных таблиц.

Компонента DataGrid — решение для показа связанных таблиц в одной компоненте, в DataGridView такой возможности нет. Не все компоненты доступны по умолчанию, в том числе, и DataGrid . Щёлкаем правой кнопкой мыши на панели элементов управления, Выбрать элементы, на вкладке «Компоненты .NET Framework» устанавливаем флажок возле элемента DataGrid пространства имен System.Windows.Forms , нажимаем ОК.

После этого DataGrid можно добавить на форму.

На загрузку формы (обработчик события Load ):

На нажатие кнопки (переключает между родительской и дочерней таблицами):

Пример 3. Делаем всё по-современному — через DataGridView . Подробнее об этом компоненте.

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

Rows — коллекция строк, имеет тип DataGridRowCollection

Columns — коллекция столбцов, тип DataGridColumnCollection

Оба свойства индексируются как массивы для доступа к конкретной строке/столбцу, нумерация с нуля.

Cells — коллекция ячеек из объекта DataGridRowCollection , приведём пример доступа к ячейке:

RowCount , ColumnCount — количество строк и столбцов

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

Методы для добавления/удаления/редактирования строк относятся к коллекции Rows и имеют типовые имена: Add , Insert , Clear , AddCopy , InsertCopy , Remove , RemoveAt и могут иметь по несколько перегрузок каждая, например, для Add есть версии Add() , Add(КоличествоНовыхСтрок) , Add (DataGridViewRow ^row) , Add (. Object ^object)

Настройка внешнего вида компонента также типовая: такие свойства, как BackColor , Alignment , Font и т.д. находятся в объекте типа DataGridViewCellStyle

Каждая ячейка представлена объектом System::Windows::Forms::DataViewCell , за «личный» внешний вид ячейки отвечает свойство InheritedStyle , вид по умолчанию — DefaultCellStyle

1. По нажатию кнопки перекрасим фон таблицы в розовый цвет:

2. . или только фон выбранной ячейки:

Значения cell_y , cell_x описаны глобально в классе формы:

инициализируются в обработчике её события Load :

и получаются значения в обработчиках событий dataGridView1_KeyUp , dataGridView1_MouseUp (одинаковым кодом):

3. Обработчик события dataGridView1_CellFormatting для выделения текущей ячейки жёлтым фоном:

4. Сделаем в dataGridView1 таблицу со значениями функции. Код по нажатию кнопки:

5. Есть также множество событий, связанных с редактированием ячейки: CellBeginEdit , CellEndEdit , CellParsing , CellValidating , CellValidated и т.д.

Например, по умолчанию наша таблица редактируется. Чтобы разрешить в первом столбце ( Y(X) ) ввод только числовых значений, напишем следующий код, выполняемый по событию CellValueChanged :

Величина lastValue описана в классе формы:

и, по событию CellBeginEdit , сохраняет предыдущее значение, хранимое в ячейке:

Красивое оформление таблицы в консоли С++

Всем привет. Хотелось бы узнать как делать вот такую красивую таблицу в консоли : оформление таблицы

Интересует как делать такой отступ в каждой строке, штатными средствами ? Нету никаких сдвигов, все ровнехонько. Искал, не нашел инфы такой. Заранее благодарю.

Скорее всего используется два приема: Дополнение строки лидирующими пробелами делается через что-то типа printf («% 4d», 1); Выравнивание в столбцы — через печать табуляции: printf («1\t2\n123\t2\n»);

Используйте манипуляторы вывода такие, как, например, std::setw , std::left , std::right и другие.

Для их использования включите заголовок <iomanip>

Вот, например, как можно вывести заголовок

В результате запуска вы получите вывод

Попробуйте библиотеку BPrinter (основана на Boost.Spirit, но может быть собрана и без нее). Правда она рисует границы таблицы.

user avatar

надо знать максимальную ширину поля до начала вывода строк.

если ширина уже известна, то всё просто. например, функцией printf() :

собираем и проверяем:

справку по функции printf() (если установлена) можно посмотреть локально командой:

адаптировано из этого ответа.

user avatar

user avatar

самый универсальный вариант: нам нужны будут: структура в которой ты хранишь данные каждого обьекта . так же переменная структура size в которую мы будем записывать длину самого длинного поля примерно по такой логике: на старте все значения полей 0 . посредством пересчета длинны значения данных с strlen (если это не string то надо привести значение в тип string через itoa или др). ты добавляешь в список все свои обьекты и считаешь какой длины каждое поле. если длина поля больше чем то что в структуре size соответственного поля то перезаписываешь на новое значение. в конце ты будешь иметь максимальное значение каждого из полей для вывода. остается лишь запустить цикл в котором ты поставишь size — strlen(переменная на вывод) + n (где n это отступы между столбцами) пробелов а после и сам текст переменной на вывод. аналогично делается если отступ надо сделать сзади или разместить текст по середине.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ консоль оформление или задайте свой вопрос.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345

Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *