Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168

Работа с плагинами через интерфейс

09.04.2015, 17:53. Показов 1102. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем я сподвигся на такое
Есть интерфейс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public interface IPlugin
    {
        string PluginName { get; } // имя плагина
        string DisplayPluginName { get; } // имя плагина, которое отображается
        string PluginDescription { get; } // описание плагина
        string Author { get; } // имя автора
        int Version { get; } // версия
        IPluginHost Host { get; set; } // ссылка на главную форму
 
        void Show(string Connection_string, string login_user); // отображает форму
    }
 
    public interface IPluginHost
    {
        bool Register(IPlugin plug);
    }
И плагин

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
 public class PlugIn : IPlugin
    {
        private string _PluginName = "Foto1";
        private string _DisplayPluginName = "Фотоплагин";
        
        private string _PluginDescription = "foto.jpg";
        private string _Author = "coexire";
        private int _Version = 1000;
        IPluginHost _Host;
 
        public void Show(string Connection_string, string login_user)
        {
            frmP3Main frm = new frmP3Main(this);
            frm.connection = Connection_string;
            frm.Visible = true;
            frm.sh();
            
            //frm.ShowDialog();
        }
 
        public IPluginHost Host
        {
            get { return _Host; }
            set
            {
                _Host = value;
                _Host.Register(this);
            }
        }
 
        public string PluginName
        {
            get
            {
                return _PluginName;
            }
        }
 
        public string DisplayPluginName
        {
            get
            {
                return _DisplayPluginName;
            }
        }
 
        public string PluginDescription
        {
            get
            {
                return _PluginDescription;
            }
        }
 
        public string Author
        {
            get
            {
                return _Author;
            }
        }
 
        public int Version
        {
            get
            {
                return _Version;
            }
        }
    }
На главной форме по плагину отстраивается кнопка по нажатию на которую открывается форма

C#
1
2
3
Button but = (Button)sender;
            int selectedIndex = Convert.ToInt32(but.Name.Remove(0, 4));
            plugins[selectedIndex - 1].Show(Conection_string,login_user);
Я передаю два параметра в методе шоу.

Дальше открывается форма и public void sh() показывает пустой MessageBoх

C#
1
2
3
4
 public void sh()
        {
            MessageBox.Show(connection);
        }
Добавлено через 2 минуты
Подскажите как получить то что находится в connection;

Добавлено через 4 минуты
Что-то мне подсказывает что проблема в
C#
1
void Show(string Connection_string, string login_user);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2015, 17:53
Ответы с готовыми решениями:

работа с плагинами
Всем привет. Скажите плиз как отобразить виджеты плагинов в шаблоне, который сам создал.Плагины активированы но я не знаю как их...

Работа с 1С через веб интерфейс
Доброго всем времени суток! сейчас рабоаю как пользователь. Заинтересовал меня такой момент в работе с 1С: нужно организовать...

Работа с плагинами программы
Пишу программу с поддержкой плагинов. Нужно как-то в метод Run(объект_формы) плагину передать объект главной формы приложения, чтобы при...

4
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.04.2015, 18:02
decoexire, попробуйте GC.KeepAlive(frm); в методе Show()
0
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168
09.04.2015, 18:06  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
попробуйте GC.KeepAlive(frm); в методе Show()
А что оно дает?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.04.2015, 18:09
decoexire, Посмотрите на свой код:
C#
1
2
3
4
5
6
7
8
9
        public void Show(string Connection_string, string login_user)
        {
            frmP3Main frm = new frmP3Main(this);
            frm.connection = Connection_string;
            frm.Visible = true;
            frm.sh();
            
            //frm.ShowDialog();
        }
Здесь вы создаете локальную переменную frm и выходите из метода. А локальные переменные при выходе из метода делают что? Они уничтожаются сборщиком мусора. Поэтому может получиться так, что форма то у вас отображается, но сам объект формы уже уничтожен.
Что бы сборщик мусора не собирал этот объект - нужно вызвать KeepAlive.
(хотя на самом деле причина глюков может быть и в другом)
1
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168
09.04.2015, 20:59  [ТС]
Помогло спасибо Большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2015, 20:59
Помогаю со студенческими работами здесь

Работа с данными JSON через графический интерфейс
Задача: Создать GUI программу в которой нужно вводить обычные данные(в TextBox), и посредством нажатия кнопки создать файл .json с этими...

Работа с плагинами (Проверка присутствия DLL)
Всем здравия и приятного времечка! Есть проект состоящий из одного EXE файла и допустим 3 библиотек. В каждой библиотеке присутствует...

Работа с серверами pop3 через интерфейс командной строки
подключился к imap.gmail.com:993 к сообщениям через openssl. не могу авторизоваться через pop3 , а через telnet и др. не нужно. ...

Консоль и Qt. Возможность работать как через консоль так и через графический интерфейс
Может кто-то знает... Как в одном и том же приложении совместить возможность запуска и через консоль и через разработанный через Qt...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru