С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Кнопка не отображается в указанной ячейке

17.02.2019, 08:09. Показов 1348. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кнопка не отображается в указанной ячейке. Как исправить?

ApplicationABC:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System.Windows.Forms;
 
namespace Forms
{
    /// <summary>
    /// Управляет приложением.
    /// </summary>
    public static class ApplicationABC
    {
        /// <summary>
        /// Запускает приложение.
        /// </summary>
        public static void Run()
        {
            InternalDataABC.MainForm.StartPosition = FormStartPosition.CenterScreen;
            WindowABC.Title = "Forms";
            WindowABC.ShowIcon = false;
            Application.Run(InternalDataABC.MainForm);
        }
 
        /// <summary>
        /// Закрывает приложение.
        /// </summary>
        public static void Close() => InternalDataABC.MainForm.Close();
    }
}
ButtonABC:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
 
namespace Forms
{
    /// <summary>
    /// Кнопка.
    /// </summary>
    public class ButtonABC : FullStyledControlABC, IClickable
    {
        private void OnClickHandler(object sender, EventArgs eventArgs) => OnClick?.Invoke();
 
        /// <summary>
        /// Настраивает элемент управления перед добавлением на панель.
        /// </summary>
        /// <param name="text">Текст.</param>
        /// <param name="row">Строка.</param>
        /// <param name="col">Столбец.</param>
        /// <param name="rowCount">Количество занимаемых строк.</param>
        /// <param name="colCount">Количество занимаемых столбцов.</param>
        protected override void InitializeControl(string text, int row, int col, int rowCount, int colCount)
        {
            base.InitializeControl(text, row, col, rowCount, colCount);
            control.Click += OnClickHandler;
        }
 
        /// <summary>
        /// Событие щелчка кнопок мыши.
        /// </summary>
        public event Action OnClick;
 
        public ButtonABC(string text = InternalDataABC.EmptyString, int row = 0, int col = 0, int rowCount = 1, int colCount = 1) : base(text, row, col, rowCount, colCount)
        {
        }
    }
}
ControlABC:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System.Drawing;
using System.Windows.Forms;
 
namespace Forms
{
    /// <summary>
    /// Элемент управления.
    /// </summary>
    public class ControlABC
    {
        protected Control control = new Control()
        {
            Dock = DockStyle.Fill,
        };
 
        /// <summary>
        /// Настраивает элемент управления перед добавлением на панель.
        /// </summary>
        /// <param name="text">Текст.</param>
        /// <param name="row">Строка.</param>
        /// <param name="col">Столбец.</param>
        /// <param name="rowCount">Количество занимаемых строк.</param>
        /// <param name="colCount">Количество занимаемых столбцов.</param>
        protected virtual void InitializeControl(string text, int row, int col, int rowCount, int colCount)
        {
            control.Text = text;
        }
 
        /// <summary>
        /// Добавляет элемент управления на панель.
        /// </summary>
        /// <param name="row">Строка.</param>
        /// <param name="col">Столбец.</param>
        /// <param name="rowCount">Количество занимаемых строк.</param>
        /// <param name="colCount">Количество занимаемых столбцов.</param>
        protected void AddControl(int row, int col, int rowCount, int colCount)
        {
            InternalDataABC.MainPanel.Controls.Add(control, 1, 1);
        }
 
        /// <summary>
        /// Инициализирует элемент управления и добавляет его на панель.
        /// </summary>
        /// <param name="text">Текст.</param>
        /// <param name="row">Строка.</param>
        /// <param name="col">Столбец.</param>
        /// <param name="rowCount">Количество занимаемых строк.</param>
        /// <param name="colCount">Количество занимаемых столбцов.</param>
        protected void Initialize(string text, int row, int col, int rowCount, int colCount)
        {
            InitializeControl(text, col, row, rowCount, colCount);
            AddControl(col, row, rowCount, colCount);
        }
 
        /// <summary>
        /// Указывает заблокирован ли элемент управления.
        /// </summary>
        public virtual bool IsEnabled
        {
            get => control.Enabled;
            set => control.Enabled = value;
        }
 
        /// <summary>
        /// Текст.
        /// </summary>
        public virtual string Text
        {
            get => control.Text;
            set => control.Text = value;
        }
 
        /// <summary>
        /// Цвет фона.
        /// </summary>
        public virtual Color BackgroundColor
        {
            get => control.BackColor;
            set => control.BackColor = value;
        }
 
        public ControlABC(string text = InternalDataABC.EmptyString, int row = 0, int col = 0, int rowCount = 1, int colCount = 1) => Initialize(text, col, row, rowCount, colCount);
    }
}
FullStyledControlABC:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Drawing;
 
namespace Forms
{
    /// <summary>
    /// Полностью настраиваемый элемент управления.
    /// </summary>
    public class FullStyledControlABC : ControlABC
    {
        /// <summary>
        /// Цвет текста.
        /// </summary>
        public virtual Color TextColor
        {
            get => control.ForeColor;
            set => control.ForeColor = value;
        }
 
        public FullStyledControlABC(string text = InternalDataABC.EmptyString, int row = 0, int col = 0, int rowCount = 1, int colCount = 1) : base(text, row, col, rowCount, colCount)
        {
        }
    }
}
InternalDataABC:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System.Drawing;
using System.Windows.Forms;
 
namespace Forms
{
    /// <summary>
    /// Внутренние данные.
    /// </summary>
    public static class InternalDataABC
    {
        /// <summary>
        /// Пустая строка.
        /// </summary>
        internal const string EmptyString = "";
 
        /// <summary>
        /// Количество строк и столбцов.
        /// </summary>
        internal const int DefaultCount = 10;
 
        /// <summary>
        /// Главная форма.
        /// </summary>
        internal static Form MainForm { get; } = new Form();
 
        /// <summary>
        /// Панель.
        /// </summary>
        internal static TableLayoutPanel MainPanel { get; } = new TableLayoutPanel()
        {
            CellBorderStyle = TableLayoutPanelCellBorderStyle.Single,
            RowCount = DefaultCount,
            ColumnCount = DefaultCount,
            BackColor = Color.White,
            Dock = DockStyle.Fill,
            Parent = MainForm,
        };
 
        static InternalDataABC()
        {
            float percent = 33.3f;
 
            for (int i = 0; i < DefaultCount; i++)
                MainPanel.RowStyles.Add(new RowStyle(SizeType.Percent, percent));
 
            for (int i = 0; i < DefaultCount; i++)
                MainPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, percent));
        }
    }
}
WindowABC:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace Forms
{
    /// <summary>
    /// Управляет окном.
    /// </summary>
    public static class WindowABC
    {
        internal static void ExecuteResize(object sender, EventArgs e) => OnResize?.Invoke();
 
        /// <summary>
        /// Иконка.
        /// </summary>
        public static Icon Icon
        {
            get => InternalDataABC.MainForm.Icon;
            set => InternalDataABC.MainForm.Icon = value;
        }
 
        /// <summary>
        /// Указывает отображать ли иконку.
        /// </summary>
        public static bool ShowIcon
        {
            get => InternalDataABC.MainForm.ShowIcon;
            set => InternalDataABC.MainForm.ShowIcon = value;
        }
 
        /// <summary>
        /// Указывает отображать ли окно в панели задач Windows.
        /// </summary>
        public static bool ShowInTaskbar
        {
            get => InternalDataABC.MainForm.ShowInTaskbar;
            set => InternalDataABC.MainForm.ShowInTaskbar = value;
        }
 
        /// <summary>
        /// Заголовок окна.
        /// </summary>
        public static string Title
        {
            get => InternalDataABC.MainForm.Text;
            set => InternalDataABC.MainForm.Text = value;
        }
 
        /// <summary>
        /// Ширина окна.
        /// </summary>
        public static int Width
        {
            get => InternalDataABC.MainForm.Width;
            set => InternalDataABC.MainForm.Width = value;
        }
 
        /// <summary>
        /// Высота окна.
        /// </summary>
        public static int Height
        {
            get => InternalDataABC.MainForm.Height;
            set => InternalDataABC.MainForm.Height = value;
        }
 
        /// <summary>
        /// Событие изменения размеров окна.
        /// </summary>
        public static event Action OnResize;
 
        /// <summary>
        /// Сворачивает окно.
        /// </summary>
        public static void Minimize() => InternalDataABC.MainForm.WindowState = FormWindowState.Minimized;
 
        /// <summary>
        /// Разрачивает окно.
        /// </summary>
        public static void Maximize() => InternalDataABC.MainForm.WindowState = FormWindowState.Maximized;
 
        /// <summary>
        /// Нормализует окно.
        /// </summary>
        public static void Normalize() => InternalDataABC.MainForm.WindowState = FormWindowState.Normal;
 
        /// <summary>
        /// Центрирует окно.
        /// </summary>
        public static void CenterOnScreen()
        {
            Rectangle bounds = Screen.PrimaryScreen.Bounds;
            InternalDataABC.MainForm.Location = new Point((bounds.Width - Width) / 2, (bounds.Height - Height) / 2);
        }
    }
}
Добавлено через 2 минуты
Нужно добиться следующего: любой элемент управления размещается на панели TableLayoutPanel, которая занимает всю форму.

Добавлено через 1 минуту
Полный код тут.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2019, 08:09
Ответы с готовыми решениями:

не отображается картинка в ячейке таблицы
верхнюю часть страницы верстаю с помощью таблицы.. вот такой код: &lt;table border=&quot;1&quot; align=&quot;center&quot; cellspacing=&quot;0&quot;...

Кнопка в ячейке таблицы JTable
Добрый день. Подскажите пытаюсь вставить кнопку(JButton) в ячейку таблицы (JTable). У меня есть модель таблицы, но в ячейке вместо кнопки...

Курсор -в ячейке - кнопка не работает??
В EXCEL'е оказывается, что когда заполнил ячейку, но курсор остаетсе в ней (т.е. имеет место режим ввода данных), любая кнопка не...

5
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.02.2019, 10:17
Соколиный глаз,
Во-первых, процент считается неправильно, он у вас всегда ноль из-за целочисленного деления.
Нужно так:
C#
1
        private static readonly float Percent = 100 * (float)Width / DefaultCount / Width;
Во-вторых, вы кладете контролы на tableLayoutPanel, но сама tableLayoutPanel не кладется на форму. Соответственно ее и не видно.
В-третьих, ваш код по ссылке - не актуальный, не соответствует коду, который вы приводите здесь.

Ну и кроме того, архитектура - швах. Статические классы - зачем?
И вообще зачем вы все это делаете? Я еще понимаю, если бы вы делали движок без применения System.Windows.Forms. Но вы же делаете просто обертку вокруг System.Windows.Forms.
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.02.2019, 12:28  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
вы же делаете просто обертку вокруг System.Windows.Forms.
В PascalABC.NET есть так называемые учебные модули. Я делаю подобные для C#, чтобы забыть PascalABC.NET навсегда. Я также делаю их в расчёте на то, что научусь чему нибудь пока их делаю. Например, у Вас.

Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System.Windows.Forms;
 
namespace Forms
{
    /// <summary>
    /// Главная форма.
    /// </summary>
    public static class FormABC
    {
        /// <summary>
        /// Количество строк и столбцов.
        /// </summary>
        private const int DefaultCount = 10;
 
        internal static readonly Form form = new Form()
        {
            Text = "Forms",
            StartPosition = FormStartPosition.CenterParent
        };
 
        internal static readonly TableLayoutPanel tableLayoutPanel = new TableLayoutPanel()
        {
            Dock = DockStyle.Fill,
            RowCount = DefaultCount,
            ColumnCount = DefaultCount
        };
 
        /// <summary>
        /// Процентная доля строк или столбцов от размеров формы.
        /// </summary>
        internal static readonly float Percent = 100 * (float)Width / DefaultCount / Width;
 
        /// <summary>
        /// Ширина формы.
        /// </summary>
        public static int Width
        {
            get => form.Width;
            set => form.Width = value;
        }
 
        /// <summary>
        /// Высота формы.
        /// </summary>
        public static int Height
        {
            get => form.Height;
            set => form.Height = value;
        }
 
        static FormABC()
        {
            form.Controls.Add(tableLayoutPanel);
 
            for (int i = 0; i < DefaultCount; i++)
                tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, Percent));
 
            for (int i = 0; i < DefaultCount; i++)
                tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, Percent));
        }
    }
}
Почему до сих пор не видно кнопки?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System.Drawing;
using System.Windows.Forms;
 
namespace Forms
{
    /// <summary>
    /// Элемент управления.
    /// </summary>
    public class ControlABC
    {
        internal Control control = new Control()
        {
            Dock = DockStyle.Fill,
        };
 
        /// <summary>
        /// Настраивает элемент управления перед добавлением на панель.
        /// </summary>
        /// <param name="text">Текст.</param>
        /// <param name="row">Строка.</param>
        /// <param name="col">Столбец.</param>
        /// <param name="rowCount">Количество занимаемых строк.</param>
        /// <param name="colCount">Количество занимаемых столбцов.</param>
        protected virtual void InitializeControl(string text, int row, int col, int rowCount, int colCount)
        {
            control.Text = text;
        }
 
        /// <summary>
        /// Инициализирует элемент управления и добавляет его на панель.
        /// </summary>
        /// <param name="text">Текст.</param>
        /// <param name="row">Строка.</param>
        /// <param name="col">Столбец.</param>
        /// <param name="rowCount">Количество занимаемых строк.</param>
        /// <param name="colCount">Количество занимаемых столбцов.</param>
        protected void Initialize(string text, int row, int col, int rowCount, int colCount)
        {
            InitializeControl(text, col, row, rowCount, colCount);
            FormABC.tableLayoutPanel.Controls.Add(control, col, row); // <-- Если вместо control написать new Button(), то кнопка отображается. Почему?
            FormABC.tableLayoutPanel.SetRowSpan(control, rowCount);
            FormABC.tableLayoutPanel.SetColumnSpan(control, colCount);
        }
 
        /// <summary>
        /// Указывает заблокирован ли элемент управления.
        /// </summary>
        public virtual bool IsEnabled
        {
            get => control.Enabled;
            set => control.Enabled = value;
        }
 
        /// <summary>
        /// Текст.
        /// </summary>
        public virtual string Text
        {
            get => control.Text;
            set => control.Text = value;
        }
 
        /// <summary>
        /// Цвет фона.
        /// </summary>
        public virtual Color BackgroundColor
        {
            get => control.BackColor;
            set => control.BackColor = value;
        }
 
        public ControlABC(string text, int row = 0, int col = 0, int rowCount = 1, int colCount = 1) => Initialize(text, col, row, rowCount, colCount);
    }
}
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.02.2019, 12:34
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Почему до сих пор не видно кнопки?
А где у вас создается кнопка?
Я вижу лишь создание объекта типа Control. Но Control - это базовый тип. Он ничего не отображает, ничего не рисует, это просто пустой контейнер.
То что вы ему присвоили Text - ничего не значит, он его не отображает.

PS Выкладывайте весь код целиком (а еще лучше - через github). Читать и понимать отрывочные кусочки - невозможно.
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.02.2019, 12:36  [ТС]
Вот весь код.
Вложения
Тип файла: rar Forms.rar (188.5 Кб, 0 просмотров)
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.02.2019, 12:41  [ТС]
Проблему решил. Спасибо, что помогли!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2019, 12:41
Помогаю со студенческими работами здесь

Кнопка Button в ячейке DataGridView
Добрый день! На форме размещен DataGridVew с динамической загрузкой данных из файла xml при загрузке формы. Планирую сделать в...

QTableView - кнопка или текст в ячейке
Подскажите, пожалуйста, как лучше реализовать следующую вещь. Имеется таблица из 7 столбцов и порядка 20 строк В ней будут...

QTableWidget кнопка и текст в 1 ячейке используя QTableWidgetItem
Собственно необходимо запихнуть кнопку для удаления в ячейку с текстом(текст и кнопка должны быть отдельно).Могу я как-нибудь обойтись без...

Не отображается кнопка
Не могу никак понять, что не так. Почему кнопка не отображается. Много чего перерыл, а понять не могу. import java.awt.Color; ...

Не отображается кнопка
Здравствуйте. В приложении на странице есть кнопка &quot;Купить&quot;. На андроид 4,6,7 и 5.1 она отображается, а вот на 5.1.1 - нет. Подскажите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru