К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Вопрос по С#

Модератор
0 - 11.12.2012 - 14:14
Суть такая есть программа с несколькими формами, на главной форме есть компонента serial port , процедура обработки приема данных из порта ну и всякая фигня прочая ) не могу понять как с остальных форм обращаться к компонетам и процедурам главной формы.
вообще не могу даже условно взять текст с какого нить Лейбела.
как объявить обработчик принятых данных с порта, форму?



1 - 12.12.2012 - 04:49
Ну как бы и как везде в ООП, у тебя должна быть ссылка на эту форму, чтобы вызывать ее методы и свойства. Тобишь либо при создании этой формы присваивать ее какой-нибуть статической общедоступной переменной, либо передавать при создании других форм ссылку на нее, ну или еще как извратиться.
Модератор
2 - 12.12.2012 - 07:48
1-Sserj >это то понятно))
как это сделать?
просто в дельфях например в интерфейс добавил и все не паришся насколько помню.
в VB тоже вроде объявил глобально и доступна.
а ту хз
3 - 12.12.2012 - 10:57
(2) Ну к примеру сделай класс со статическими методами setFormWithPort и getFormWithPort() ну и внутри поле статическое с типом этой формы, туда его запихивай и доставай, можно конечно и просто поле открытое, но это как то не гламурно :)
4 - 12.12.2012 - 11:06
3-Sserj > +
Вообще по хорошему это должен быть класс с контейнером где хранятся ссылки на все открытые формы твоей программульки и их можно былобы получать по какому-либо ключу, так тебе будет легко допустим обойти все открытые формы и сделать с ними что-нибуть, допустим свернуть или наоборот развернуть все, или "закрыть все окна", вывести что-то на передний план или открыть если чего-то не открыто, вообщем то что является нормой во всех MDI приложениях :)
Гость
5 - 12.12.2012 - 12:36
Если WinForms, то:
1. Объявить нужный компонент на форме как public (либо создать public только get свойство, через которое давать ссылку на компонент).
2. Доступ к объекту формы организовать либо через Application.OpenForms, либо в Program.cs объявить public static свойство и в нем возвращать ссылку на главную форму. Пример:
-----
static class Program
**
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
**
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Form1 v_main_form = new Form1();
MainForm = v_main_form;
Application.Run(v_main_form);
**

static Form1 MainForm ** get; private set; **
**
------
Если WPF, то доступ к главной форме через Application.MainWindow.
------
Мое ИМХО: если объект используется в нескольких формах приложения - его лучше не "кидать" на форму, а создавать как ресурс уровня всего приложения. Либо передавать его в другие формы через параметр конструктора формы в момент ее создания.
Гость
6 - 14.12.2012 - 14:46
Привет Это здорово, это удивительный информацию, я также искал для этого.
С уважением
Модератор
7 - 17.12.2012 - 09:32
вроде разобрался всем спасибо
Гость
8 - 17.12.2012 - 18:42
Через делегаты можешь
Примерно так объявить:
//Описание делегатов для связи с главной формой и вывода сообщений из потоков
delegate void addText(string text);
// Добавление элемента в ListBox1
private void addItemToListBox1(string text)
**
listBox1.Items.Add(text);
**
Так вызывать:
if (listBox3.InvokeRequired)
**
listBox3.Invoke(new addText(addItemToListBox1), new object[] ** "Отключение клинета. IP: " + rep.Address.ToString() **);
**
Гость
9 - 17.12.2012 - 18:44
упс, немного разный код скопировал.
в вызове listBox3 заменить на listBox1 (подлежащее замене выделено жирным)


К списку вопросов






Copyright ©, Все права защищены