Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
.NET 4.x

Не работает свойство

17.03.2013, 16:51. Показов 2319. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При передаче string параметра на другую форму передается пустое значение (не null, а "").

Идея такова: создана маленькая формочка, которая будет лишь передавать одно значение в метод класса (Метод добавляет в таблицу БД запись), а именно, нажимаем кнопку вызывается метод в классе => Открывается форма => в textBox вносим текст => форма закрывается и метод выполняется дальше.

В чем может быть проблема? Может быть оно как то очищается при закрытии маленькой формочки?

Вот свойство:
C#
1
2
 
public string listParametr { get { return textBox_ItemName.Text; } set { textBox_ItemName.Text = value; } }

Вот код с использованием этого свойства:
C#
1
2
3
4
5
private void button_addNewOrgIssue_Click(object sender, EventArgs e)
        {
            AddNewItemList addItem = new AddNewItemList();
            DAL NewOrgIssue = new DAL("OrgIssuePasport", "NameOrgIssuePasport", addItem.listParametr);
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2013, 16:51
Ответы с готовыми решениями:

Не работает свойство
.b_right article:first-child a { padding-bottom: 10px; border-bottom: 1px solid #efefef; } Не понимаю, в правом блоке...

Свойство KeyPressed не работает
По какой причине может происходить то, что при запуске приложения windows forms свойство KeyPressed, установленное на главное окно, не...

Не работает свойство радиокнопки
люди подскажите почемуто в команде Option25.Value бейсик пишет что какието проблемы с .Value

25
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
17.03.2013, 17:04
TrueSize, Зачем вы писали свойство?
TextBox.Text уже свойство
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
17.03.2013, 17:33
Цитата Сообщение от TrueSize Посмотреть сообщение
(не null, а "")
А должна быть null?

Цитата Сообщение от Noob.net Посмотреть сообщение
Зачем вы писали свойство?
Инкапсуляция?
0
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
17.03.2013, 17:48  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
А должна быть null?
Нет, должно быть значение, которое я ввожу в textBox, но вместо него предается "" - вот в чем дело.

Если будет null, то вылетит исключение.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
17.03.2013, 17:52
C#
1
AddNewItemList addItem = new AddNewItemList();
А почему форма не показывается пользователю? Show или ShowDialog нужно вызывать.
0
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
17.03.2013, 18:14  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
А почему форма не показывается пользователю? Show или ShowDialog нужно вызывать.
Она вызывается в классе...
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
17.03.2013, 19:39
Цитата Сообщение от TrueSize Посмотреть сообщение
Она вызывается в классе...
дайте весь код вашей "маленькой формочки".
0
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
17.03.2013, 20:47  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
дайте весь код вашей "маленькой формочки".
Метод:
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
 public bool AddNewItemList(string Table, string Field, string Values)
        {
            bool flag = false;
 
            string query = String.Format("INSERT INTO {0}({1}) VALUES('{2}')",Table,Field,Values);
 
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                SqlCommand com = new SqlCommand(query, conn);
 
                try
                {
                    conn.Open();
                    if (com.ExecuteNonQuery() == 1)
                        flag = true;
                }
                catch
                {
                    MessageBox.Show("Ошибка при выполнии метода!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    flag = false;
                }
            }
 
            return flag;
        }

Конструктор:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 public DAL(string Table, string Field, string Values)
        {
            AddNewItemList addForm = new AddNewItemList();
                addForm.ShowDialog(); //вызов маленькой формы
 
                try
                {
                    if (AddNewItemList(Table, Field, Values) == true)
                    {
                        MessageBox.Show("Запись успешно добавлена", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show("Запись не добавлена", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch
                {
                    MessageBox.Show("Пустое свойство!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
        }

Код кнопки, вызов метода:
C#
1
2
3
4
5
private void button_addNewOrgIssue_Click(object sender, EventArgs e)
        {
            AddNewItemList addItem = new AddNewItemList(); //ссылка на маленькую форму
            DAL NewOrgIssue = new DAL("OrgIssuePasport", "NameOrgIssuePasport", addItem.listParametr);
        }

Код маленькой формы (которая должна просто передать свойство форме, в которой вызавется метод (код выше))
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
public partial class AddNewItemList : Form
    {
        DAL dal = new DAL();
 
        public string listParametr { get { return textBox_ItemName.Text; } set { textBox_ItemName.Text = value; } }
        
        public AddNewItemList()
        {
            InitializeComponent();
        }
 
        private void button_CancelAdd_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.No;
        }
 
        private void button_AddNewItem_Click(object sender, EventArgs e)
        {
            try
            {
                listParametr = textBox_ItemName.Text;
                this.Close();
            }
            catch
            {
               
            }
        }
 
       
    }
0
45 / 45 / 9
Регистрация: 19.11.2012
Сообщений: 124
17.03.2013, 20:56
Что будет если в ф-кции
C#
1
private void button_addNewOrgIssue_Click(object sender, EventArgs e)
заменить строку
C#
1
 DAL NewOrgIssue = new DAL("OrgIssuePasport", "NameOrgIssuePasport", addItem.listParametr);
на
C#
1
DAL NewOrgIssue = new DAL("OrgIssuePasport", "NameOrgIssuePasport", TextBox.Text);
?
И вы уверены, что при нажатии кнопки button_addNewOrgIssue в окне TextBox.Text присутствует какой-либо текст? Это можно проверить, задав текст боксу дефолтный текст. Проделайте вышесказанные операции, чтобы локализировать проблему

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
А должна быть null?


Инкапсуляция?
Инкапсуляция? public же, да еще и с set'ом.
0
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
17.03.2013, 21:18  [ТС]
fictiont, в том то и дело, что метод вызывается не с той формы, в которой находится textBox (его просто так не дернешь). Это все сделано для того, чтобы не рисовать 10+ форм одинаковых, а просто передать параметр и работать дальше...

Когда вставляешь дефолтный текст, он передается и все работает, о когда пишешь руками, то не работает...
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
17.03.2013, 21:24
НЯ?! Вот не пойму, ты создаешь новою форму, и без отображения сразу передаешь параметры.
Цитата Сообщение от TrueSize Посмотреть сообщение
C#
1
2
3
//ссылка на маленькую форму 
AddNewItemList addItem = new AddNewItemList(); 
DAL NewOrgIssue = new DAL("OrgIssuePasport", "NameOrgIssuePasport", addItem.listParametr);
наверное должно быть что-то вида:

C#
1
2
3
4
5
6
7
8
//ссылка на маленькую форму 
AddNewItemList addItem = new AddNewItemList(); 
if (addItem.ShowDialog() == DialogResult.Yes)
{DAL NewOrgIssue = new DAL("OrgIssuePasport", "NameOrgIssuePasport", addItem.listParametr);}
else
{
//Пользователь ничего не ввел
}
[/quote]

Далее, кто тебя учил выполнять запрос без параметров?
Цитата Сообщение от TrueSize Посмотреть сообщение
C#
1
string query = String.Format("INSERT INTO {0}({1}) VALUES('{2}')",Table,Field,Values);
А если пользователь введет в Values что-то типа "'1', '2', '3'"?

Кнопку в "маленькой форме" можно нажать и без заполнения.

Замечание fictiont в тему - зачем делать дополнительное свойство, да ещё и таким образом реализованное.

Далее - есть проверка ввел ли пользователь в твоей "маленькой форме" данные или нет, посредством DialogResult, но в вызывающем методе ты её не используешь.

try-catch в каждом методе, да ещё вложены друг в друга. Не хорошо...

Итить, и что самое весёлое - метод и название класса имеют одно название AddNewItemList.
0
45 / 45 / 9
Регистрация: 19.11.2012
Сообщений: 124
17.03.2013, 21:30
Цитата Сообщение от TrueSize Посмотреть сообщение
fictiont,
Когда вставляешь дефолтный текст, он передается и все работает, о когда пишешь руками, то не работает...
Очевидно, если дефолтный текст передается, то ваш текстбокс не получает значения, перед получением свойства. То есть там по дефолту " " и передается " ". Ну и то, что сказал Wolfdp тоже стоит учесть.

P.s. А за не параметризированные запросы меня еще в школе по пальцам линейкой били.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
17.03.2013, 21:38
Цитата Сообщение от fictiont Посмотреть сообщение
А за не параметризированные запросы меня еще в школе по пальцам линейкой били.
Нья-ха-ха-ха-ха! Я о их существовании вообще не знал, до этой недели. XD
0
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
17.03.2013, 23:09  [ТС]
У меня складывается чувство, что мы совершенно недопонимаем друг друга...
Цитата Сообщение от Wolfdp Посмотреть сообщение
НЯ?! Вот не пойму, ты создаешь новою форму, и без отображения сразу передаешь параметры.
внимательно посмотрите конструктор, там идет вызов формы... (Ведь я же ввожу данные куда то...)

Цитата Сообщение от Wolfdp Посмотреть сообщение
А если пользователь введет в Values что-то типа "'1', '2', '3'"?
Кнопку в "маленькой форме" можно нажать и без заполнения.
Это все частности... Это можно доделать и потом, когда будет работать сам алгоритм....

На счет запроса, не понимаю, что вы имеете ввиду.... Пользователь будет передавать только параметр Values (через этот злосчастный textbox), остальное передаю лично я в коде.
В раз четвертый наверное повторяю, что все это делается что бы не плодить формы и строчки...
Если вы меня опять где то не понимаете, прошу, задавайте вопросы... Пол дня убил в пустую....

А метод переименую, не заметил как то сначала =)

Добавлено через 21 минуту
Почему вот я сразу так не сделал...
Вот в чем суть:
Вот большая форма, Клик , все начинается, когда нажимаешь на выделенную кнопочку. Вот ее код:
C#
1
2
3
4
5
private void button_addNewOrgIssue_Click(object sender, EventArgs e)
        {
            AddNewItemList addItem = new AddNewItemList(); //ссылка, на маленькую форму, чтобы использовать свойство
            DAL NewOrgIssue = new DAL("OrgIssuePasport", "NameOrgIssuePasport", addItem.listParametr);
        }
Далее открывается маленькая форма Клик
В нее пользователь водит новый пунктик (параметр Values в запросе).
И должен отрабатывать код:

Это код маленикой формы
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
 public partial class AddNewItemList : Form
    {
        DAL dal = new DAL();
 
        public string listParametr { get { return textBox_ItemName.Text; } set { textBox_ItemName.Text = value; } }
        
        public AddNewItemList()
        {
            InitializeComponent();
        }
 
        private void button_CancelAdd_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.No;
        }
 
        private void button_AddNewItem_Click(object sender, EventArgs e) //кнопка "Добавить" на маленькой форме
        {
            try
            {
                listParametr = textBox_ItemName.Text;
                this.Close();
            }
            catch
            {
               
            }
        }
 
       
    }
}
Конструктор в классе:
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
/// <summary>
        /// Добавить новый элемент в список
        /// </summary>
        /// <param name="Table">Таблица в БД</param>
        /// <param name="Field">Поле в таблице</param>
        /// <param name="Values">Добавляемое значение</param>
        public DAL(string Table, string Field, string Values)
        {
            AddNewItemList addForm = new AddNewItemList();
                addForm.ShowDialog();
 
                try
                {
                    if (AddItemList(Table, Field, Values) == true)
                    {
                        MessageBox.Show("Запись успешно добавлена", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show("Запись не добавлена", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch
                {
                    MessageBox.Show("Пустое свойство!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
        }

Метод класса:
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
        /// <summary>
        /// Добавить новый элемент в список
        /// </summary>
        /// <param name="Table">Таблица в БД</param>
        /// <param name="Field">Поле в таблице</param>
        /// <param name="Values">Добавляемое значение</param>
        /// <returns></returns>
        public bool AddItemList(string Table, string Field, string Values)
        {
            bool flag = false;
 
            string query = String.Format("INSERT INTO {0}({1}) VALUES('{2}')",Table,Field,Values);
 
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                SqlCommand com = new SqlCommand(query, conn);
 
                try
                {
                    conn.Open();
                    if (com.ExecuteNonQuery() == 1)
                        flag = true;
                }
                catch
                {
                    MessageBox.Show("Ошибка при выполнии метода!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    flag = false;
                }
            }
 
            return flag;
        }
Хочу сделать универсальный алгоритм, который лично мне облегчил бы работу, чтобы он вызывал одну и ту же форму, но передавал разные параметры (обратите внимание на 1 скрин, там еще две кнопочки с плюсами, а на остальных вкладках еще по несколько штук). Делать для каждой этой кнопки форму - самоубийство (мы же не в Индии всетаки).
0
45 / 45 / 9
Регистрация: 19.11.2012
Сообщений: 124
17.03.2013, 23:38
Скиньте весь проэкт, если будет время гляну. Так разбираться сложно.

P.s. я так понял при нажатии вот этого плюса, в базу добавляется поле с пустым названием, то есть вы получаете " ".
Но судя по вашим ответам выше, если для текст бокса "маленькой формочки", что открывается по плюсу поставить дефолтное значение, то запись добавляется именно с дефолтным значением? Отсюда вывод - значение текстбокса считывается на при нажатии кнопки "Добавить" а в какой-то другой момент времени. Или я чего-то не понимаю.
0
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
18.03.2013, 00:05  [ТС]
Клик
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
18.03.2013, 00:10
Цитата Сообщение от TrueSize Посмотреть сообщение
У меня складывается чувство, что мы совершенно недопонимаем друг друга...
Нет, не понимаешь лишь ты. Вот смотри: ты вызываешь конструктор для создания объекта DAL и передаеш в него некие параметры. Один из этих параметров - свойство диалогового окна, которое даже не отображатся. В самом конструкторе ты создаешь новое(!) окно, вызываешь его и все. Полученные параметры ты нигде не используешь.


Закоментируй вызов окна в конструкторе и вызове диалоговое окно до объявления объекта DAL.

P.S. Препод будет в шоке от этого.
0
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
18.03.2013, 00:16  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Препод будет в шоке от этого.
нет никакого препода
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
18.03.2013, 00:22
TrueSize, окей, где ошибка то хоть понял?

Добавлено через 4 минуты
ладно, вот "костыль". Но вообще-то, логику запросов к БД нужно делать отдельно.

if (AddItemList(Table, Field, addForm.listParametr ) == true)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        public DAL(string Table, string Field, string Values)
        {
            AddNewItemList addForm = new AddNewItemList();
                addForm.ShowDialog();
 
                try
                {
                    if (AddItemList(Table, Field, addForm.listParametr ) == true)
                    {
                        MessageBox.Show("Запись успешно добавлена", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show("Запись не добавлена", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch
                {
                    MessageBox.Show("Пустое свойство!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
        }
0
 Аватар для TrueSize
2 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 131
18.03.2013, 00:22  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
TrueSize, окей, где ошибка то хоть понял?
я сразу затестил все первоначальные рекомендации, все работает...
а как тогда сделать, чтобы значения передавались в класс? мне это интересно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2013, 00:22
Помогаю со студенческими работами здесь

не работает свойство width
Хочу создать колонку текста определенной ширины в определенном месте экрана. В определенном месте экрана сделать получилось, а width он...

Не работает свойство opacity
Не меняет значение. Не знаю в чем проблема. Помогите Код размещаем не в виде картинок а на форуме! Плюс ко всему и сами картинки...

Не работает свойство align-self
Пытаюсь выровнять блок .header-nav по правому краю с помощью флексбоксов. Вот только align-self: flex-end; его почему-то не равняет, прошу...

Не работает свойство Float
Делаю набросок своего первого сайта , но не могу понять почему не работает обтекание навигации под id=&quot;nav&quot; над элементом под...

Не работает свойство display
После значения list-item,маркер никак не появляется &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;style text=&quot;text/css&quot;&gt; p{ ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru