Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/144: Рейтинг темы: голосов - 144, средняя оценка - 4.59
2 / 2 / 0
Регистрация: 17.08.2009
Сообщений: 51

Доступ к элементам другой формы

03.09.2009, 15:20. Показов 27787. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
подскажите, как можно осуществить доступ к элементам другой формы.
грубо говоря, мне надо из 2-й формы обновить содержимое листбокса 1й формы.
в первой форме указал в Button с модификатором public
C#
1
2
AddBase second = new AddBase();
second.Show();
вторая форма
C#
1
2
3
4
5
6
7
 public partial class AddBase : Form
    {
        public Admin parentForm;
        public AddBase()
        {
            InitializeComponent(); 
        }
и позже вставляю
C#
1
parentForm.Base_list.Items.Add(Global.name[h]); //Base_list - листбокс первой формы
компилятор выдаёт ошибку
"for_1C.Admin.Base_list" недоступен из-за его уровня защиты. почему он не доступен - не могу понять. и как это исправить? может я совершенно не то делаю?
мне главное понять, как управлять элементами другой формы из текущей формы
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2009, 15:20
Ответы с готовыми решениями:

Доступ к элементам другой формы
Здравствуйте. Подскажите пожалуйста как при закрытии одной формы изменить параметры какого-либо элемента другой формы(например, текст в...

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

Как получить доступ к элементам управления другой формы
как можно получит значение элементов первой формы если в проекте 2 формы Form1 f = new Form1(); f.ShowDialog(); this.textBox1.Text =...

15
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
03.09.2009, 15:29
По умолчанию и по пронцыпам ООП все члены в классе формы являются private, например контролы
можете поставить public, и получите доступ к контролам другой формы, но это не корректно с точки зрения ООП лучше для этой цели использовать public свойства, и через них передавать нужные данные в другую форму.
0
2 / 2 / 0
Регистрация: 17.08.2009
Сообщений: 51
03.09.2009, 15:56  [ТС]
Sergei, спасибо за объяснение,не много получилось.
теперь выдаёт ошибку при выполнении на строчку
parentForm.Base_list.Items.Add(Global.na me[h]);
пишет, что в экземпляре объекта не задана ссылка на объект.
пытаюсь разобраться... может у кого-нить найдётся совет?
0
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
04.09.2009, 01:41
Желательно, не обращаться напрямую к элементам другой формы, это не безопасно. Лучше это делать через промежуточные функции, проверяя валидность данных. Вот небольшой пример:

Форма №1, к ее элементам мы хотим получить доступ, к примеру к элементу DataGridView:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public object[] AddInfoDataGrid
        {
            set
            {
                for (var i = 0; i < cardGridView.Rows.Count; i++)
                {
                    if (cardGridView.Rows[i].Cells[0].Value.ToString() != value[0].ToString()) continue;
                    cardGridView.Rows[i].Cells[8].Value = value[1];
                    break;
                }
 
                for (var i = 0; i < searchGridView.Rows.Count; i++)
                {
                    if (searchGridView.Rows[i].Cells[0].Value.ToString() != value[0].ToString()) continue;
                    searchGridView.Rows[i].Cells[8].Value = value[1];
                    break;
                }
            }
        }
Форма №2, отсюда мы будем "стучаться":
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private readonly MainForm mainForm;
 
private void saveButton_Click(object sender, EventArgs e)
        {
            if (infoTextBox.Text.CompareTo(oldText) != 0)
            {
                mainForm.AddInfoDataGrid = new object[]
                                               {
                                                   cardNoTextBox.Text,
                                                   infoTextBox.Text
                                               };
            }
        }
0
2 / 2 / 0
Регистрация: 17.08.2009
Сообщений: 51
04.09.2009, 01:45  [ТС]
Спасибо, утром попробую реализовать.
0
2 / 2 / 0
Регистрация: 17.08.2009
Сообщений: 51
04.09.2009, 10:18  [ТС]
to4kin, что-то я не могу вкурить в ваш код... элемент DataGridView не виден ни в первой, ни во второй форме... да и как-то очень много не понятного для меня в нём... можете не много рассказать или объяснить его?

Цитата Сообщение от to4kin Посмотреть сообщение
Желательно, не обращаться напрямую к элементам другой формы, это не безопасно
почему не безопасно? и к каким последствиям это может привести?
0
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
04.09.2009, 11:36
Цитата Сообщение от pixel_61 Посмотреть сообщение
to4kin, что-то я не могу вкурить в ваш код... элемент DataGridView не виден ни в первой, ни во второй форме... да и как-то очень много не понятного для меня в нём... можете не много рассказать или объяснить его?
Что значит не виден ни в первой, ни во второй? Как минимум DataGridView должен быть виден в той форме, в которой его создали.

C#
1
public object[] AddInfoDataGrid
это функция для работы с DataGridView из вне, в данном случае она позволяет добавлять элемент только в 1 ячейку.
Для наглядности можно описать ее так:

C#
1
2
3
4
5
6
7
public object[] AddInfoDataGrid
        {
            set
            {                
                    DataGridView1.Rows[1].Cells[8].Value = value[0];                   
            }
        }
т.е. мы в строку под номером 1 в ячейку номер 8 записываем что-то.

Далее записываем в DataGridView1 значение из TextBox1
C#
1
2
3
4
mainForm.AddInfoDataGrid = new object[]
                                               {
                                                   TextBox1.Text,
                                               };
Посмотрите внимательнее на названия форм и элементов в вашем проекте, скорее всего проблема в этом.

Цитата Сообщение от pixel_61 Посмотреть сообщение
to4kin, почему не безопасно? и к каким последствиям это может привести?
Если вы откроете доступ к элементу другой формы, следовательно вы откроете доступ ко всем свойствам данного элемента. Через "промежуточную функцию" вы разрешаете изменять в элементе только то что предусмотрено данной функцией и ничего более, элемент же не виден из вне.

P.S. Выложите код двух ваших форм, посмотрим в чем там проблема.

Добавлено через 25 минут
Вот полностью рабочий пример с использованием ListBox'a:

From1:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public partial class Form1 : Form
    {
        private readonly Form2 form2;
 
        public Form1()
        {
            InitializeComponent();
            form2 = new Form2(this);
            form2.Show();
        }
 
        public object[] AddListBox
        {
            set
            {
                listBox1.Items.Add(value[0]);
            }
        }
    }
Form2:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public partial class Form2 : Form
    {
        private readonly Form1 form;
        
        public Form2(Form1 form)
        {
            this.form = form;
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            form.AddListBox = new object[]
                                  {
                                      textBox1.Text
                                  };
        }
    }
0
2 / 2 / 0
Регистрация: 17.08.2009
Сообщений: 51
04.09.2009, 12:24  [ТС]
код первой формы
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
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.Security.Cryptography;
 
 
namespace for_1C
{
    public partial class Admin : Form
    {
        public Admin parentForm;
 
        static class Global
        {   // объявляем глабальную переменную
            public static int n=0;
            public static string[] name;
            public static string[] address;
            
 
        } 
 
        public Admin()
        {
 
 
            InitializeComponent();
            
 
            //string PerformText;
            //***************************************************************
            // Блок расшифровки                           *******************
            //***************************************************************
            int lenText;
            
            //rate - 1ый параметр шифрования
            int rate = 1;
            //2ой парам. ширф
            int keyCode = 2;
            string endtext2 = "";
            Encoding encoding = Encoding.GetEncoding("windows-1251");
            StreamReader sr = new StreamReader("C:\\base.list", encoding);
            string line = sr.ReadLine();
            sr.Close();
            lenText = line.Length;
            for (int i = 0; i < lenText; i++)
            {
                int buf = 0;
                buf = (int)(line[i]);
                buf -= (keyCode * rate);
                endtext2 += (char)buf;
 
            }
 
            //****************************************************************
            
            MessageBox.Show(endtext2);
 
            foreach (char a in endtext2)//поиск символа в строке
            {
                if (a == '|')
                {
                    Global.n = Global.n + 1;  //считаем кол-во символов '|'
                }
            }
            //string b = Convert.ToString(Global.n);
            //MessageBox.Show(b);
            
            // блок для считывания символов из декодированной строки в массив до знака | и после
            //**************************************
            
            for (int i = 0; i <= Global.n; i++)
            {
                int k = Global.n / 2;
                //var bases = new List<string>();
                //var paths = new List<string>();
                Global.name = new string[k];
                Global.address = new string[k];
                var arr = endtext2.Split('|');
                int j = i + 1;
                //if (i == j) continue;
                if (j > Global.n) break; 
                if (i % 2 == 0)//проверка на чётность
                {
                    //bases.Add(arr[i]);
                    //Base_list.Items.Add(arr[i]);
                    int h =0;
                    h = h + 1;
                    Global.name[h] = arr[i];
                    this.Base_list.Items.Add(Global.name[h]);
                }
                else
                {
                    //Base_list.Items.Add(arr[i]);
                    //paths.Add(arr[i]);
                    int h = 0;
                    h = h + 1;
                    Global.address[h] = arr[i];
                    //Base_list.Items.Add(Global.address[h]);
                }
                //Base_list.Items.Add(arr[i]);
                //Base_list.Items.Add(arr[j]);
            }
 
 
 
            //for (int i = 0; 1 <= 3; i++)
            //{
            //    Base_list.Items.Add(Global.address[i]);
            //}
            //**************************************                  
 
 
        }
        //запуск формы для редактирования пароля
        public void buttonPasEdit_Click(object sender, EventArgs e)
        {
            pasEdit form = new pasEdit();
            form.Show();
        }
 
 
        public void BaseAdd_Click(object sender, EventArgs e)
        {   //проверка на существование файла
            if (File.Exists(@"c:\bas.list"))
            {
                //AddBase second = new AddBase();
                //second.Show();
                AddBase form = new AddBase(this); 
                form.Show();// запуск формы для добавления базы
 
 
            }
            else
            {
 
                DialogResult result = MessageBox.Show("Файл Base.list не найден. Создать его?", "Файл не найден", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                switch (result)
                {
                    case DialogResult.Yes:
                        {
                            File.Create(@"c:\bas.list");
 
                            if (File.Exists(@"c:\bas.list"))
                            {
                                MessageBox.Show("Файл Base.list успешно создан", "Файл создан", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                            }
                            else
                            {
                                MessageBox.Show("Не удалось создать файл Base.list", "Не удалось создать файл", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            }
                            break;
                        }
                    case DialogResult.No:
                        {
                            return;
                        }
                }
            }
        }
        private void BaseDEL_Click(object sender, EventArgs e)
        {
        }
    }
}
код второй формы

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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.Security.Cryptography;
using System.IO;
using System.Threading;
 
namespace for_1C
{
    public partial class AddBase : Form
    {
      
 
        static class Global
        {   // объявляем глабальную переменную
            public static int n = 0;
            public static string[] name;
            public static string[] address;
 
 
        } 
        private readonly Admin form;
        
        public AddBase(Admin form)
        {
            this.form = form;
            InitializeComponent();
        }
 
             
 
 
        private void Add_Base_Click(object sender, EventArgs e)
        {
            
 
 
            string nameText;
            string addressText;
            int lenText;            
            //rate - 1ый параметр шифрования
            int rate = 1;
            //2ой парам. ширф
            int keyCode = 2;
            nameText = nameBase.Text+"|";
            addressText = Address_Base.Text+"|";
            string endtext = "";
            string endtext2 = "";
            //шифратор
           
            lenText = nameText.Length;
            for (int i = 0; i < lenText; i++)
            {
                int buf = 0;
                buf = (int)(nameText[i]);
                buf += (keyCode * rate);
                endtext += (char)buf;
 
                
            }
            lenText = addressText.Length;
            for (int i = 0; i < lenText; i++)
            {
                int buf = 0;
                buf = (int)(addressText[i]);
                buf += (keyCode * rate);
                endtext2 += (char)buf;
                                
            }
 
          
 
            Encoding encoding = Encoding.GetEncoding("windows-1251");
            StreamReader sr = new StreamReader(@"C:\base.list",encoding);
            string line = sr.ReadLine();
            sr.Close();
            //MessageBox.Show(line);
            using (StreamWriter wr = new StreamWriter("C:\\base.list", false, encoding))
                wr.WriteLine(line+endtext+endtext2);
            //MessageBox.Show(endtext);
            //MessageBox.Show(nameText);
 
            //******************************************************************
            // Блок расшифровки                           *******************
            //***************************************************************
            int lenText1;
 
            //rate - 1ый параметр шифрования
            //int rate = 1;
            //2ой парам. ширф
            //int keyCode = 2;
            string endtext3 = "";
            //Encoding encoding = Encoding.GetEncoding("windows-1251");
            StreamReader sr1 = new StreamReader("C:\\base.list", encoding);
            string line1 = sr1.ReadLine();
            sr1.Close();
            lenText1 = line1.Length;
            for (int i = 0; i < lenText1; i++)
            {
                int buf = 0;
                buf = (int)(line1[i]);
                buf -= (keyCode * rate);
                endtext3 += (char)buf;
 
            }
 
            //****************************************************************
 
            MessageBox.Show(endtext3);
            foreach (char a in endtext3)//поиск символа в строке
            {
                if (a == '|')
                {
                    Global.n = Global.n + 1;  //считаем кол-во символов '|'
                }
            }
            //string b = Convert.ToString(Global.n);
            //MessageBox.Show(b);
 
            // блок для считывания символов из декодированной строки в массив до знака | и после
            //**************************************
 
            for (int i = 0; i <= Global.n; i++)
            {
                int k = Global.n / 2;
                //var bases = new List<string>();
                //var paths = new List<string>();
                Global.name = new string[k];
                Global.address = new string[k];
                var arr = endtext3.Split('|');
                int j = i + 1;
                //if (i == j) continue;
                if (j > Global.n) break;
                if (i % 2 == 0)//проверка на чётность
                {
                    //bases.Add(arr[i]);
                    //Base_list.Items.Add(arr[i]);
                    int h = 0;
                    h = h + 1;
                    Global.name[h] = arr[i];
                    //MessageBox.Show(Global.name[h]);
                }
                else
                {
                    //Base_list.Items.Add(arr[i]);
                    //paths.Add(arr[i]);
                    int h = 0;
                    h = h + 1;
                    Global.address[h] = arr[i];
                    //form.parentForm.Base_list.Items.Add(Global.address[h]);
                    form.Base_list.Items.Add(Global.name[h]);
                }
 
            }
        }
    }
}
немного переделал по вашему примеру.
0
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
04.09.2009, 17:25
Не совсем понял что делает эта программа, но не в этом суть. Вы опять строите обращение так же как и раньше, не глядя на примеры. Вот переработанный код Вашей программы, обратите внимание на части кода выделенные восклицательными знаками.

Первая форма:
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication
{
    public partial class Form1 : Form
    {
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       public new Form1 ParentForm;//!!!!!!!!!!!!!!!!!!!!!!
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
        public Form1()
        {
            InitializeComponent();
 
            //string PerformText;
            //***************************************************************
            // Блок расшифровки                           *******************
            //***************************************************************
 
            //rate - 1ый параметр шифрования
            const int rate = 1;
            //2ой парам. ширф
            const int keyCode = 2;
            var endtext2 = "";
 
            var encoding = Encoding.GetEncoding("windows-1251");
            var sr = new StreamReader("C:\\base.list", encoding);
 
            var line = sr.ReadLine();
            sr.Close();
 
            if (line != null)
            {
                var lenText = line.Length;
                for (var i = 0; i < lenText; i++)
                {
                    var buf = (int) (line[i]);
                    buf -= (keyCode*rate);
                    endtext2 += (char) buf;
                }
 
                //****************************************************************
 
                MessageBox.Show(endtext2);
 
                foreach (var a in endtext2) //поиск символа в строке
                {
                    if (a == '|')
                    {
                        Global.N = Global.N + 1; //считаем кол-во символов '|'
                    }
                }
                //string b = Convert.ToString(Global.N);
                //MessageBox.Show(b);
 
                // блок для считывания символов из декодированной строки в массив до знака | и после
                //**************************************
 
                for (var i = 0; i <= Global.N; i++)
                {
                    var k = Global.N/2;
                    //var bases = new List<string>();
                    //var paths = new List<string>();
                    Global.Name = new string[k];
                    Global.Address = new string[k];
                    var arr = endtext2.Split('|');
                    var j = i + 1;
                    //if (i == j) continue;
                    if (j > Global.N) break;
                    if (i%2 == 0) //проверка на чётность
                    {
                        //bases.Add(arr[i]);
                        //Base_list.Items.Add(arr[i]);
                        var h = 0;
                        h = h + 1;
                        Global.Name[h] = arr[i];
                        Base_list.Items.Add(Global.Name[h]);
                    }
                    else
                    {
                        //Base_list.Items.Add(arr[i]);
                        //paths.Add(arr[i]);
                        var h = 0;
                        h = h + 1;
                        Global.Address[h] = arr[i];
                        //Base_list.Items.Add(Global.Address[h]);
                    }
                    //Base_list.Items.Add(arr[i]);
                    //Base_list.Items.Add(arr[j]);
                }
 
 
 
                //for (int i = 0; 1 <= 3; i++)
                //{
                //    Base_list.Items.Add(Global.Address[i]);
                //}
                //**************************************  
            }
            else
            {
                MessageBox.Show("Файл base.list пустой!");
            }
        }
 
 
 
        static class Global
        {   // объявляем глабальную переменную
            public static int N;
            public static string[] Name;
            public static string[] Address;
        }
 
        //запуск формы для редактирования пароля
        public void buttonPasEdit_Click(object sender, EventArgs e)
        {
            var form = new pasEdit();
            form.Show();
        }
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//Функция для добавления элементов в Base_list
        public object[] AddBaseList
        {
            set
            {
                Base_list.Items.Add(value);
            }
        }
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
        public void BaseAdd_Click(object sender, EventArgs e)
        {
            //проверка на существование файла
            if (File.Exists(@"c:\base.list"))
            {
                //AddBase second = new AddBase();
                //second.Show();
                var form = new AddBase(this);
                form.Show(); // запуск формы для добавления базы
            }
            else
            {
//Взял на себя смелость немного подправить эту часть, уж сильно бросилась в глаза
                if (MessageBox.Show("Файл Base.list не найден. Создать его?", "Файл не найден", 
                    MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) 
                    == DialogResult.Yes)
                {
                    try
                    {
                        File.Create(@"c:\base.list");
                        MessageBox.Show("Файл Base.list успешно создан", "Файл создан", 
                            MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Не удалось создать файл Base.list. Ошибка: " + error, "Не удалось создать файл", 
                            MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
               
            }
        }
 
    }
}
Вторая форма:
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication
{
    public partial class AddBase : Form
    {
        private readonly Form1 form;
 
        public AddBase(Form1 form)
        {
            this.form = form;
            InitializeComponent();
        }
 
        static class Global
        {   // объявляем глабальную переменную
            public static int N;
            public static string[] Name;
            public static string[] Address;
        }
 
        private void AddBaseClick(object sender, EventArgs e)
        {
            //rate - 1ый параметр шифрования
            const int rate = 1;
            //2ой парам. ширф
            const int keyCode = 2;
            var nameText = nameBase.Text+"|";
            var addressText = Address_Base.Text+"|";
            var endtext = "";
            var endtext2 = "";
            //шифратор
           
            var lenText = nameText.Length;
            for (var i = 0; i < lenText; i++)
            {
                var buf = (int)(nameText[i]);
                buf += (keyCode * rate);
                endtext += (char)buf;
            }
 
            lenText = addressText.Length;
            for (var i = 0; i < lenText; i++)
            {
                var buf = (int)(addressText[i]);
                buf += (keyCode * rate);
                endtext2 += (char)buf;
            }
 
            var encoding = Encoding.GetEncoding("windows-1251");
            var sr = new StreamReader(@"C:\base.list",encoding);
            var line = sr.ReadLine();
            sr.Close();
 
            //MessageBox.Show(line);
            using (var wr = new StreamWriter("C:\\base.list", false, encoding))
                wr.WriteLine(line+endtext+endtext2);
            //MessageBox.Show(endtext);
            //MessageBox.Show(nameText);
 
            //******************************************************************
            // Блок расшифровки                           *******************
            //***************************************************************
 
            //rate - 1ый параметр шифрования
            //int rate = 1;
            //2ой парам. ширф
            //int keyCode = 2;
            var endtext3 = "";
            //Encoding encoding = Encoding.GetEncoding("windows-1251");
            var sr1 = new StreamReader("C:\\base.list", encoding);
            var line1 = sr1.ReadLine();
            sr1.Close();
            var lenText1 = line1.Length;
            for (var i = 0; i < lenText1; i++)
            {
                var buf = (int)(line1[i]);
                buf -= (keyCode * rate);
                endtext3 += (char)buf;
            }
 
            //****************************************************************
 
            MessageBox.Show(endtext3);
            foreach (var a in endtext3)//поиск символа в строке
            {
                if (a == '|')
                {
                    Global.N = Global.N + 1;  //считаем кол-во символов '|'
                }
            }
            //string b = Convert.ToString(Global.N);
            //MessageBox.Show(b);
 
            // блок для считывания символов из декодированной строки в массив до знака | и после
            //**************************************
 
            for (var i = 0; i <= Global.N; i++)
            {
                var k = Global.N / 2;
                //var bases = new List<string>();
                //var paths = new List<string>();
                Global.Name = new string[k];
                Global.Address = new string[k];
                var arr = endtext3.Split('|');
                var j = i + 1;
                //if (i == j) continue;
                if (j > Global.N) break;
                if (i % 2 == 0)//проверка на чётность
                {
                    //bases.Add(arr[i]);
                    //Base_list.Items.Add(arr[i]);
                    var h = 0;
                    h = h + 1;
                    Global.Name[h] = arr[i];
                    //MessageBox.Show(Global.Name[h]);
                }
                else
                {
                    //Base_list.Items.Add(arr[i]);
                    //paths.Add(arr[i]);
                    var h = 0;
                    h = h + 1;
                    Global.Address[h] = arr[i];
                    //form.parentForm.Base_list.Items.Add(Global.Address[h]);
                   //Вот так вызывать, а не напрямую как у вас выше
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//Само добавление в Base_list элемента Global.Name[h]
                   form.AddBaseList = new object[]
                                           {
                                               Global.Name[h]
                                           };
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                }
 
            }
        }
    }
}
И еще такой вопрос. Вот в этом месте
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
for (int i = 0; i <= Global.n; i++)
            {
                int k = Global.n / 2;
                //var bases = new List<string>();
                //var paths = new List<string>();
                Global.name = new string[k];
                Global.address = new string[k];
                var arr = endtext3.Split('|');
                int j = i + 1;
                //if (i == j) continue;
                if (j > Global.n) break;
                if (i % 2 == 0)//проверка на чётность
                {
                    //bases.Add(arr[i]);
                    //Base_list.Items.Add(arr[i]);
                    int h = 0;
                    h = h + 1;
                    Global.name[h] = arr[i];
                    //MessageBox.Show(Global.name[h]);
                }
                else
                {
                    //Base_list.Items.Add(arr[i]);
                    //paths.Add(arr[i]);
                    int h = 0;
                    h = h + 1;
                    Global.address[h] = arr[i];
                    //form.parentForm.Base_list.Items.Add(Global.address[h]);
                    form.Base_list.Items.Add(Global.name[h]);
                }
 
            }
вы обьявляете Global.name, так вот, если проверка на четность не пройдет, и Global.name будет только обьявлен, но не инициализирован, то добавление в Base_list будет выдавать ошибку, т.к. элемент не инициализирован. Возможно тут form.Base_list.Items.Add(Global.name[h]); вы хотели написать Global.adress.
1
2 / 2 / 0
Регистрация: 17.08.2009
Сообщений: 51
07.09.2009, 14:15  [ТС]
огромное спасибо!
но не совсем ещё работает
у меня в лист бокс добавляются не элементы массива а надпись "Массив Object[]"

пытался здесь вставить цикл, но это не дало нужного результата
C#
1
2
3
4
5
6
7
8
public object[] AddBaseList
        {
            set
            {
                Base_list.Items.Add(value);
            }
 
        }
не знаю в чём дело...

Цитата Сообщение от to4kin Посмотреть сообщение
вы обьявляете Global.name, так вот, если проверка на четность не пройдет, и Global.name будет только обьявлен, но не инициализирован, то добавление в Base_list будет выдавать ошибку, т.к. элемент не инициализирован. Возможно тут form.Base_list.Items.Add(Global.name[h]); вы хотели написать Global.adress.
я просто в спешке перепутал, я хотел так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (i % 2 == 0)//проверка на чётность
                {
                    //bases.Add(arr[i]);
                    //Base_list.Items.Add(arr[i]);
                    int h = 0;
                    h = h + 1;
                    Global.name[h] = arr[i];
                     form.Base_list.Items.Add(Global.name[h]);
                }
                else
                {
                    //Base_list.Items.Add(arr[i]);
                    //paths.Add(arr[i]);
                    int h = 0;
                    h = h + 1;
                    Global.address[h] = arr[i];
                    //form.parentForm.Base_list.Items.Add(Global.address[h]);
                   
                }
0
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.09.2009, 15:35
Проверьте правильность написания вызова функции для добавления элементов из второй формы:

C#
1
2
3
4
form.AddBaseList = new object[]
                                           {
                                               Global.Name[h]
                                           };
0
2 / 2 / 0
Регистрация: 17.08.2009
Сообщений: 51
07.09.2009, 16:03  [ТС]
именно так и написано у меня
C#
1
2
3
4
form1.AddBaseList = new object[]
                                           {
                                               Global.name[h]
                                           };
я пробовал месседжбокс вставлять перед этим, он мне все элементы правильно отображал.
0
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.09.2009, 18:24
Просмотрел код еще раз, ошибка в том что Global.name[h] = NULL, т.е. элемент пуст, проверь свой код, где вносишь данные в этот массив, либо сделай так:

C#
1
2
3
4
5
if (Global.Name[h] != null)
 form1.AddBaseList = new object[]
                                           {
                                               Global.name[h]
                                           };
Тогда пустые эелементы не будут добавляться. И второе, добавление делается по другому:

C#
1
2
3
4
5
6
7
public object[] AddBaseList
        {
            set
            {
                Base_list.Items.Add(String.Format("{0}",value));
            }
        }
1
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
08.09.2009, 05:05
Цитата Сообщение от pixel_61 Посмотреть сообщение
у меня в лист бокс добавляются не элементы массива а надпись "Массив Object[]"
пытался здесь вставить цикл, но это не дало нужного результата
C#
1
2
3
4
5
6
7
8
9
public object[] AddBaseList
        {
            set
            {
                foreach(object obj in value)
                    Base_list.Items.Add(obj);
            }
 
        }


Цитата Сообщение от to4kin Посмотреть сообщение
И второе, добавление делается по другому:
Код C#
public object[] AddBaseList
{
set
{
Base_list.Items.Add(String.Format("{0}", value));
}
}
То же самое, что и у автора. Для отображения объектов, в листбоксе используется метод ToString к каждому элементу списка. Формат даст тоже самое
0
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
08.09.2009, 10:44
Цитата Сообщение от Green Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
public object[] AddBaseList
        {
            set
            {
                foreach(object obj in value)
                    Base_list.Items.Add(obj);
            }
 
        }



То же самое, что и у автора. Для отображения объектов, в листбоксе используется метод ToString к каждому элементу списка. Формат даст тоже самое
Специально занес в проект, формат дает другой результат.
0
2 / 2 / 0
Регистрация: 17.08.2009
Сообщений: 51
09.09.2009, 09:51  [ТС]
Цитата Сообщение от to4kin Посмотреть сообщение
Просмотрел код еще раз, ошибка в том что Global.name[h] = NULL, т.е. элемент пуст, проверь свой код, где вносишь данные в этот массив, либо сделай так:

C#
1
2
3
4
5
if (Global.Name[h] != null)
 form1.AddBaseList = new object[]
                                           {
                                               Global.name[h]
                                           };
Тогда пустые эелементы не будут добавляться. И второе, добавление делается по другому:

C#
1
2
3
4
5
6
7
public object[] AddBaseList
        {
            set
            {
                Base_list.Items.Add(String.Format("{0}",value));
            }
        }
Спасибо огромное! Так всё работает
теперь буду отлаживать свои циклы и условия(не совсем корректно работает прога). с этим сам справлюсь =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2009, 09:51
Помогаю со студенческими работами здесь

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

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

Доступ к элементам формы
Доброго времени суток. Не буду ходить вокруг да около. в общем, я занимаюсь программированием пару лет и вот решил освоить C#. До этого...

Доступ к элементам формы
Привет всем! Народ, такой вопрос. Можно ли организовать доступ к элементам формы через индексы? Например если они помещены в один...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru