Рейтинг:
2
OriginalGriff
Вы можете создать открытый метод в Class2, который запускает событие, и вызвать его из других местоположений.
Или сделайте number свойством - что в любом случае должно быть, публичные поля, как правило, плохая идея - и запустите even, когда он будет изменен в сеттере.
Но, честно говоря, это действительно звучит как задница назад дизайн, который вы там получили.
_Q12_
Я сделал эту версию:
статический публичный класс Class1
{
статический публичный Class2 c2 = новый Class2();
}
и я могу вызвать c2 либо из Form1, либо из Control1. Я уже заставил его работать в Control1. Теперь я думаю, как заставить его работать для формы 1. Есть идеи?
Я также попробую ваше предложение, но я редко работаю с недвижимостью.Я не настолько к ним привыкли. Я понятия не имею, на что они годятся и для чего они предназначены. Поля легкие и простые.
Я уже сделал это и работаю на Control1:
общественные файл usercontrol1()
{
метод InitializeComponent();
Class1.c2.DataAvailable += новый EventHandler(c2_DataAvailable);
}
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
Класс1.С2.количество++;
этикетка 1.Текст = Class1.c2.number.Метод toString();
}
c2_DataAvailable недействительным(объект отправителя, EventArgs в электронной)
{
Класс1.С2.OnDataAvailable(нуль);
}
OriginalGriff
Почему вы делаете ваши занятия статичными?
Извините, но либо я что-то упускаю, либо этот дизайн выглядит так, будто его собрали без всякой реальной мысли.
_Q12_
Hmm, its not that hard what im asking. Hard is the implementation and probably impossible as I can see it so far. I give you an example: You see in a game, when you have a Main screen (Form1 in my case), where all the game is rendered, and when you click on some elements inside that Main screen, other little menus pop up (Control1,2,3etc in my case) and after changing some values there, you close those menus and the changes are reflected back in main screen(Form1). Simple, right? Also, what is happening in main screen (Form1), some values are being stored and updated somewhere, and when a menu is opened, those stored values are shown inside it. For example, upgrades of building, resource field, etc. I want to create something similar too. That's it.
OriginalGriff
Да - и вы идете по всем домам, чтобы сделать это, когда простое решение состоит в том, чтобы Form2 / Control 1 уведомить Form1 об изменении и позволить ему справиться с этим. Таким образом, формы / элементы управления становятся независимыми, что гораздо лучше формирует OOPs POV, а также снижает сложность (и, следовательно, надежность и ремонтопригодность) всей вашей системы. Взгляните на ссылку, и это два "компаньонских" совета - они охватывают этот материал.
_Q12_
Я все еще не понимаю. Не могли бы вы быть так любезны сделать для меня образец(функционального) кода? (не псевдокод - а очень простой нормальный код) Спасибо.
OriginalGriff
Что случилось со ссылкой, которую я дал? Неважно...
https://www.codeproject.com/Tips/548131/Transferring-information-between-two-forms-Part-2
Он включает в себя образец - он говорит о формах, но это точно то же самое для элементов управления и общих классов.
_Q12_
Вы не знаете, что случилось со ссылкой, которую вы мне даете, потому что это вторая тема, которую я открыл, но на подобную тему. Это я виноват, а не ты. Да, я прочитал то, что вы написали в этой статье, я понимаю это, я открыл и скомпилировал ваш пример кода оттуда. Все хорошо, я это прекрасно понимаю. Так вот, это способ делать вещи. Это единственный возможный путь ? Я хочу что - то более интуитивное и немного более простое в реализации. Можете ли вы следовать моей логике, которую я описал в начале этой темы, и построить что-то на ней, идя по правилам и принципам, которые вы уже знаете? Пожалуйста. И спасибо Вам за ваши потрясающие ответы.
OriginalGriff
Нет - это способ сделать это, и это действительно не сложно, когда вы освоитесь - это тот же самый способ, которым работает все остальное в вашем приложении, просто вы создаете события.
Что тоже довольно просто сделать - я использую фрагмент кода, чтобы заполнить пробелы для себя:
https://www.codeproject.com/Articles/400287/A-simple-code-snippet-to-add-an-event
Затем все, что мне нужно сделать, это набрать "prop" и дважды нажать TAB, и появится скелет события. Заполните детали, а затем просто позвоните OnMyEventName, когда я хочу подать сигнал. Сделано.
Попробуйте - это довольно легко, когда вы получите повесить его.