Настройка отображения данных в WinForms

244
28 октября 2017, 14:12

Делаю программку, наверно правильно Parser называется.

Собирает различные данные с сайта, производит вычисления, формирует стек данных и выдаёт в TextBox.

В TextBox, не совсем удобно читается и хочется как то сделать всё удобнее.

Вот как можно, такие стеки данных , выдавать примерно так ?

В идеале, если какие то стеки мне не нравятся , то удалять/скрывать по кнопке и их место заполнит предыдущий.

С textBox это выглядит так.

Answer 1

Элементарно:

using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        TableLayoutPanel tableLayoutPanel;
        public Form1()
        {
            //InitializeComponent();
            tableLayoutPanel = new TableLayoutPanel { Parent = this, Dock = DockStyle.Fill, ColumnCount = 3 };
            for (int i = 0; i < 10; i++)
            {
                var panel = new MyPanel
                {
                    BorderStyle = BorderStyle.FixedSingle,
                    Title = "Title" + i,
                    Content = "Text" + i
                };
                tableLayoutPanel.Controls.Add(panel);
            }
            tableLayoutPanel.Click += TableLayoutPanel_Click;
        }
        private void TableLayoutPanel_Click(object sender, EventArgs e)
        {
            var panel = new MyPanel { Title = "Added", Content = "Some content" };
            tableLayoutPanel.Controls.Add(panel); // добавляем в конец
            tableLayoutPanel.Controls.SetChildIndex(panel, 0); // переносим в начало
        }
    }
    public class MyPanel : Panel
    {
        private Panel topPanel;
        private Button closeButton;
        private Label titleLabel;
        private TextBox contentTextBox;
        public MyPanel()
        {
            contentTextBox = new TextBox { Parent = this, Dock = DockStyle.Fill, Multiline = true };
            topPanel = new Panel { Parent = this, Dock = DockStyle.Top, Height = 20 };
            closeButton = new Button { Parent = topPanel, Text = "\u274C", Dock = DockStyle.Right, Width = 20, BackColor = Color.Red, FlatStyle = FlatStyle.Popup };
            titleLabel = new Label { Parent = topPanel, BackColor = Color.Green, Dock = DockStyle.Fill };
            closeButton.Click += CloseButton_Click;
        }
        private void CloseButton_Click(object sender, EventArgs e)
        {
            this.Parent?.Controls.Remove(this);
        }
        public string Title { get => titleLabel.Text; set => titleLabel.Text = value; }
        public string Content { get => contentTextBox.Text; set => contentTextBox.Text = value; }
    }
}

Вместо TableLayoutPanel можно использовать FlowLayoutPanel.

Классу MyPanel (то, что вы называете "стек", хотя стек - это контейнер для данных, а не одна запись, по идее) можно наваять любой внешний вид.

При старте приложения создаются и добавляются 10 кастомных панелей. Их можно удалять кликом на крестик.

Добавлять новые панели можно кликом на сам TableLayoutPanel (сделано для простоты).

READ ALSO
В webApi контроллере не работет Ninject

В webApi контроллере не работет Ninject

Не могу понять как запустить Ninject в Api Controller при добавлении его в MVC проект

189
Цифровая подпись RSA

Цифровая подпись RSA

Здравствуйте, делаю лабораторную работу и никак не могу разобраться как получить вменяемый хэш-образВ общем суть задачи состоит в 1

267
tabControl вкадки

tabControl вкадки

tabControl, подскажите пожалуйста как изменить цвет именно самой вкладки (когда она еще не "нажата")

215