Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
1

Грамотно передать значения между классами

06.06.2012, 15:59. Показов 1437. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день! ) Помогите грамотно передавать значения между классами.
Один класс у меня принимает значения о подключившемся TCP клиенте и отправляет этому же клиенту, сформированное вторым классом, xml сообщение.
Вот в чём загвоздка. В ходе формирования xml файла мне нужно в классе передать значение переменной true другому классу (типа что моему классу(который отправляет сообщение) уже есть что читать).

Вот в этом методе я формирую сообщение и хочу сказать другому классу что оно готово

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
public XmlDocument Create_M()
        {
            using (fbBD = new FbConnection())
            {
                FbConnectionStringBuilder csb = new FbConnectionStringBuilder();
 
                csb.ServerType = 0;
 
                csb.Database = Program.form1.tb_path_db.Text;
 
                // Настройка параметров "общения" клиента с сервером
                csb.Charset = "WIN1251";
                csb.Dialect = 3;
 
                // Настройки аутентификации
                csb.UserID = Program.form1.tb_login.Text;
                csb.Password = Program.form1.tb_pswd.Text;
 
                try { fbBD = new FbConnection(csb.ToString()); }
 
                catch { Program.form1.WriteLog(Program.form1.statusStrip1.Items[0].Text = "Ошибка в параметрах соединения"); }
 
 
                fbBD.Open();
 
                sqlReqest = new FbCommand("select n, datetime, pt, parity, id from kp where status=1", fbBD);
                try
                {
                    FbDataReader r = sqlReqest.ExecuteReader();
 
                    // результат запроса построчно - строка за строкой
                    while (r.Read())
                    {
                        NO = r.GetString(0);
                        DATE = r.GetString(1);
                        PT = r.GetString(2);
                        PARITY = r.GetString(3);
                        ID = r.GetString(4);
                        ready = true;
                    }
 
                    Program.form1.WriteLog(Program.form1.statusStrip1.Items[0].Text = "Соединение с базой успешно");
                }
                catch
                {
                    Program.form1.WriteLog(Program.form1.statusStrip1.Items[0].Text = "Ошибка чтения данных из базы");
                    Program.form1.btn_load.Enabled = true;
                }
               
                XmlTextWriter writer = null;
 
                try
                {
                    sqlReqest = new FbCommand("select n, datetime, pt, parity, id from kp where status=1", fbBD);
                    FbDataReader r = sqlReqest.ExecuteReader();
                    writer = new XmlTextWriter(string.Format(Program.form1.tb_xml_name.Text + "\\" + "M000.xml"), System.Text.Encoding.Default);
 
                    writer.WriteStartDocument();
                    writer.WriteStartElement("GPS");
                    writer.WriteAttributeString("Type", "M");
                    writer.WriteAttributeString("mes", mes_M.ToString());
                    writer.WriteAttributeString("time", DateTime.Now.ToUniversalTime().ToString());
                    writer.WriteAttributeString("ver", "1");
                    while (r.Read())
                    {
                        writer.WriteStartElement("BICL");
                        writer.WriteAttributeString("id", NO.ToString());
                        writer.WriteAttributeString("time", DATE.ToString());
                        writer.WriteAttributeString("type", TYPE.ToString());
                        writer.WriteAttributeString("pt", PT.ToString());
                        writer.WriteAttributeString("parity", PARITY.ToString());
                        writer.WriteEndElement();
                    }
                    writer.WriteEndElement();
                    writer.WriteEndDocument();
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка: " + ex.Message);
                }
                finally
                {
                    if (writer != null)
                    {
                        writer.Close();
                        string a = string.Format(Program.form1.tb_xml_name.Text + "\\" + "M000.xml");
                        xmlDoc_M.Load(a);
                        server_klient s_k;
                        s_k.Send_Ready(ready);
                    }
                }               
                Program.form1.contextMenuStrip1.Items[0].Enabled = true;
                fbBD.Close();
            }
        
            return xmlDoc_M;
Метод который принимает значение переменной Ready (типа bool)

C#
1
2
3
4
public void Send_Ready(bool ready)
            {
                send_ready = ready;
            }
Метод отправляющий сообщение:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public void XML_SEND_M(object new_client)
        {
            if (send_ready == true)
            {
                byte[] xml_M = Encoding.Default.GetBytes(xml_doc_m.InnerXml);
                byte[] xml_M_0 = new byte[xml_M.Length + 1];
                xml_M.CopyTo(xml_M_0, 0);
                client.Client.Send(xml_M_0);
                send_ready=false;
            }
            else
            {
                byte[] xml_empt = Encoding.Default.GetBytes(xml_empty.InnerXml);
                byte[] xml_0 = new byte[xml_empt.Length + 1];
                xml_empt.CopyTo(xml_0, 0);
                client.Client.Send(xml_0);
            }
        }
А это вызывается всё из формы вот так:

C#
1
2
3
4
5
6
7
 Program.form1.F = Program.form1.program_functions.Create_F();
                Program.form1.mes_M = 1;
                Program.form1.empt = Program.form1.program_functions.xml_Empty();
                S_K = new server_klient(client);
                Program.form1.Invoke(new MethodInvoker(delegate { Program.form1.timer1.Enabled = true; }));
                Program.form1.Invoke(new MethodInvoker(delegate { Program.form1.timer1.Start(); }));
                tcpClientConnected.Set();

Дело в том, что мне нельзя вызывать класс server_klient через new. иначе нарушается логика программы.
но класс Functions должен наверное понимать, что где то этот класс создается.(при подключении TCP клиента.) Как грамотно сделать? Что бы передавать в ходе работы одного класса в другой?

Так как вызываю я пишет что Use of unassigned local variable 's_k' . Заранее благодарю )
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2012, 15:59
Ответы с готовыми решениями:

Передать переменную между классами
Кряхтеть пыхтеть, добренького вечера вам. Пытаюсь сообразить, правильно я сделал или нет. 1)...

Ошибка. Не передается значения между классами
Доброго времени суток! Создала программу, которая должна передавать и сравнивать значения и...

Передать значения между формами
Как передавать значения переменных между формами, т.е. мне надо, что бы на одной форме я вводил...

Передать параметр между классами в java
Как передать параметр (значение) объекта из класса main в другой класс? Допустим можно сделать...

0
06.06.2012, 15:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2012, 15:59
Помогаю со студенческими работами здесь

Не могу передать значение переменой между классами
Помогите пожалуйста разобраться со следующей проблемой. Я реализую программу, которая будет строить...

Как передать значение между двумя классами?
Добрый вечер. Есть 2 класса. @interface ViewController : UIViewController { NSString*...

Как грамотно передать данные из бд в таблицу?
всем привет, вот у меня есть таблица 10*10, в ней получается сто инпутов для данных, это нужно в бд...

Как грамотно передать данные из строкового массива в целочисленный?
Здравствуйте. Подмогите, если не сложно:- static void Main(string args) { ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru