Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269

Создание вкладки и размещение внутри элементов управления

16.11.2014, 15:05. Показов 1838. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Есть табконтрол, при запуске программа должна проверять наличие определенной библиотеки и на основе хранящихся в ней данных должна создаваться новая вкладка с элементами, описанными внутри этой библиотеки.
Как это сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2014, 15:05
Ответы с готовыми решениями:

Размещение элементов управления в заголовке формы
Стало интересно как же можно закинуть контроллы туда, где заголовок у любой формы? например у хрома все вкладки лежат там

Динамическое создание элементов управления
в общем, код написан верно (вроде как), проверял его изначально (добавлял компоненты, к ним код и прога работала), решил сделать через...

Создание элементов управления(контролов)
Всем привет! Вот сидим программируем, каждый пишет ту программу которую считает себе по силам или по интересу. Но вот скажем большая часть...

13
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
17.11.2014, 12:33
библиотеки, т.е. dll?
0
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
17.11.2014, 12:40  [ТС]
Baky, Да, планирую dll.
0
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
17.11.2014, 12:43
сурово! Не проще ли создавать типизированный xml-файл и на основе него формировать tabControl?
0
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
17.11.2014, 13:06  [ТС]
Baky, у меня уже есть табконтрол, который переделывать экономически не хочется. Как в этом случае быть?
0
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
17.11.2014, 13:17
подключать dll на лету
0
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
17.11.2014, 13:35  [ТС]
Baky, подключить на лету понятно, как передать данные из dll о компонентах и месте их расположения? как можно сделать это графически, не путаясь в координатах и размерах?
0
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
17.11.2014, 13:38
я хоть и далек от этого но думаю стоит обратится к компилятору.
У тебя Dll как создается, изменяется, хронится? Опиши по подробней
0
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
17.11.2014, 13:46  [ТС]
Создается как отдельный проект, на который ссылается другой проект из решения. Куда уж подробнее...
0
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
17.11.2014, 13:49
так бы и сказал сразу. Я то думал отдельная dll динамически изменяется. В общем все просто.
В коде создавай новый экземпляр твоего TabPage и добавляй к TabControl-у:
C#
1
tabControl1.TabPages.Add("Твой TabPage - точнее имя");
к примеру:
MyTabPage MTP = new MyTabPage();
C#
1
tabControl1.Add(MTP);
1
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
17.11.2014, 13:59  [ТС]
Примерно понял, попробую!
Обнаружил в создании проекта Windows Forms Control Library. Оно может помочь в вопросе?
0
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
17.11.2014, 14:01
Лучший ответ Сообщение было отмечено lemeserg как решение

Решение

конечно, через нее и нужно создавать dll
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
17.11.2014, 14:10
Цитата Сообщение от lemeserg Посмотреть сообщение
при запуске программа должна проверять наличие определенной библиотеки
Это самая главная фраза в задаче.
Цитата Сообщение от lemeserg Посмотреть сообщение
Создается как отдельный проект, на который ссылается другой проект из решения.
И в таком случае это тут не пройдет. При отсутствии библиотеки, вместе с которой компилировался проект будет Exception.

Вот простой пример подключения dll, в которой есть кастомные кнопка и лайбл, с заданными свойствами.
Код dll:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Windows.Forms;
using System.Drawing;
 
namespace ControlsLibrary {
    public class CustomButton:Button {
        public CustomButton() {
            Location = new Point(10, 10);
            Width = 100;
            Height = 50;
            Text = "Custom Button";
        }
    }
    public class CustomLabel : Label {
        public CustomLabel() {
            Location = new Point(100, 100);
            Text = "Custom Label";
        }
    }
}
Код формы:
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
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;
 
using System.IO;
using System.Reflection;
 
 
namespace ControlsLibrary_Test {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            this.Load += new EventHandler(Form1_Load);
        }
 
        void Form1_Load(object sender, EventArgs e) {
            string dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ControlsLibrary.dll");
            if (!File.Exists(dllPath)) {
                MessageBox.Show("File with custom controls not found!");
                return;
            }
 
            Assembly asm = Assembly.LoadFile(dllPath);
            if (asm != null) {
                Type btnType = asm.GetType("ControlsLibrary.CustomButton");
                dynamic btn = Activator.CreateInstance(btnType);
                this.Controls.Add(btn);
 
                Type lblType = asm.GetType("ControlsLibrary.CustomLabel");
                dynamic lbl = Activator.CreateInstance(lblType);
                this.Controls.Add(lbl);
            }
        }     
    }
}
Скомпилированная dll должна лежать в той же папке, что и исполняемый файл. Но никаких ссылок на нее делать не надо. При отсутствии библиотеки мы просто получим об этом сообщение и контролы не будут созданы.
0
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
18.11.2014, 08:34  [ТС]
insite2012, да, но в этом случае я все равно создаю кнопки в главной форме на основе библиотеки, а надо чтобы именно библиотека отображалась в форме и события(нажатия на кнопки и т.д.) тоже она отрабатывала.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2014, 08:34
Помогаю со студенческими работами здесь

Программное создание элементов управления
Вечер добрый. Кто-нибудь может рассказать как программно создавать элементы управления по нажатию на существующую кнопку окна? То есть у...

Создание своих элементов управления
Здравствуйте! Как можно создавать самому элементы управления, например если мне нужен текстБокс с расширенными возможностями или любой...

Динамическое создание и удаление элементов управления
В конструкторе есть комбобокс, нужно отображать n-ое кол-во textbox и label, в зависимости от значения combobox,дальше по коду ...

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

Создание таблицы без использования стандартных элементов управления
Как мне создать динамически таблицу на форме, не используя DataGridView и GridControl, что бы название и тип столбцов брал из XML-файла? ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru