Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для Lenk@
7 / 7 / 2
Регистрация: 29.04.2010
Сообщений: 21

Почему в обработчике кнопки недоступна переменная из Form_Load??

16.05.2011, 15:09. Показов 2049. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему в обработчике кнопки недоступна переменная из Form_Load??

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
private void Form2_Load(object sender, EventArgs e)
        {...
SqlDataReader datar = comm.ExecuteReader();
                try
                {
                    while (datar.Read())
                    {
                        comboBox1.Items.Add(datar["Nazvanie_otelya"].ToString());
                        string n = textBox1.Text;
                    }
                }
                finally { datar.Close(); }
}
private void button2_Click(object sender, EventArgs e)
        {
            textBox2.Text = "";
            SqlInt32 days;
            try
            {
                days = SqlInt32.Parse(n);//текст ошибки: "The name 'n' does not exist in the current context"
            }
            catch
            {
                MessageBox.Show("Введенное количество дней не является целым числом");
            }
            SqlInt32 price = Convert.ToInt32(comboBox1.SelectedValue);         
            textBox2.Text += SqlInt32.Multiply(price,days);
        }
Во втором текстбоксе должно выводиться произведение.

Перепробовала уже все, что знала(( подскажите, как исправить, пожалуйста.
Заранее огромное спасибо!!)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2011, 15:09
Ответы с готовыми решениями:

Неправильно работает if в обработчике нажатия кнопки
Работаю с БД, пользователь может выполнять запрос к базе по нескольким условиям, которые вводит в textbox. Пытаюсь обработать что если в...

Остановить бескон. цикл в обработчике кнопки
MFC приложение. Хочу что-то типа этого. 2 обработчика для кнопок OK и Cancel bool flag; //... void CMFCDlg::OnBnClickedOk() { ...

Почему недоступен список в обработчике?
public partial class Form1 : Form { public class XYZ { public XYZ(int x, int y) { ...

12
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
16.05.2011, 15:14
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
string n;//вот тут ее нужно объявить
/**************************/
private void Form2_Load(object sender, EventArgs e)
{
     SqlDataReader datar = comm.ExecuteReader();
     try
     {
           while (datar.Read())
           {
                 comboBox1.Items.Add(datar["Nazvanie_otelya"].ToString());
                 n = textBox1.Text;//тут ей присвоить значение.
           }
     }
     finally { datar.Close(); }
}
 
private void button2_Click(object sender, EventArgs e)
{
     textBox2.Text = "";
     SqlInt32 days;
     try
     {
            days = SqlInt32.Parse(n);//а тут ее использовать
     }
     catch
     {
            MessageBox.Show("Введенное количество дней не является целым числом");
     }
     SqlInt32 price = Convert.ToInt32(comboBox1.SelectedValue);         
     textBox2.Text += SqlInt32.Multiply(price,days);
}
1
Заблокирован
16.05.2011, 15:14
переменная находится за пределами области видимости
вынесите объявление переменной за Form2_Load
C#
1
2
3
4
5
6
7
        string n;
        private void Form2_Load(object sender, EventArgs e)
        {
            ...
            n = textBox1.Text;
            ...
        }
опередили
1
 Аватар для Lenk@
7 / 7 / 2
Регистрация: 29.04.2010
Сообщений: 21
16.05.2011, 19:53  [ТС]
Сработало, но теперь ругается на days в строчке
C#
1
textBox2.Text += SqlInt32.Multiply(price,days);
Попробовала перенести SqlInt32 days; из обработчика кнопки, так выскакивает ошибка из catch
0
 Аватар для umnick_kh
311 / 249 / 44
Регистрация: 06.12.2010
Сообщений: 527
16.05.2011, 20:01
У вас days объявлена,но ей не присвоено значение.
0
 Аватар для Lenk@
7 / 7 / 2
Регистрация: 29.04.2010
Сообщений: 21
16.05.2011, 20:27  [ТС]
Так разве не должно присваиваться в этой строчке??
C#
1
days = SqlInt32.Parse(n);
0
 Аватар для umnick_kh
311 / 249 / 44
Регистрация: 06.12.2010
Сообщений: 527
16.05.2011, 21:12
Простите,недоглядел.
0
гроза ленивых студентов
 Аватар для znake
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
16.05.2011, 21:20
Цитата Сообщение от Lenk@ Посмотреть сообщение
Сработало, но теперь ругается на days в строчке
ругается когда? рантайм? или компиляция?

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

если ошибка рантайм - пройдись отладчиком, посмотри, нормально ли у тебя значение передается?

и вообще - какая ошибка то?
0
 Аватар для Lenk@
7 / 7 / 2
Регистрация: 29.04.2010
Сообщений: 21
16.05.2011, 21:39  [ТС]
Вот весь код. Суть в том, чтобы в текстбоксе 1 ввести целое число, затем из комбо выбрать поле из БД и вывести в текстбоксе 2 произведение введенного числа и соответствующего значения из базы.

При компиляции выдает: "Use of unassigned local variable 'days' "

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace kursovaya
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        string connStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\kursovaya\kursovaya\Oteli.mdf;Integrated Security=True;User Instance=True";
        DataTable dt1 = new DataTable();
        string n;
        
 
        private void Form2_Load(object sender, EventArgs e)
        {            
            SqlConnection conn = new SqlConnection(connStr);
            using (conn)
            {
                SqlCommand comm = new SqlCommand("SELECT Nazvanie_otelya FROM Table1;", conn);
                SqlDataAdapter ad = new SqlDataAdapter(comm);
                ad.Fill(dt1);
                conn.Open();
                                
                SqlDataReader datar = comm.ExecuteReader();
                try
                {
                    while (datar.Read())
                    {
                        comboBox1.Items.Add(datar["Nazvanie_otelya"].ToString());
                        n = textBox1.Text;
                    }
                }
                finally { datar.Close(); }                
            }        
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            textBox2.Text = "";
            SqlInt32 days;
            try
            {
                days = SqlInt32.Parse(n);
            }
            catch
            {
                MessageBox.Show("Введенное количество дней не является целым числом");
            }
            int pr = Convert.ToInt32(comboBox1.SelectedValue);
            SqlInt32 price = pr;
    
            textBox2.Text += SqlInt32.Multiply(price,days);
        }
              
    }
}
0
гроза ленивых студентов
 Аватар для znake
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
16.05.2011, 21:52
когда ты заключаешь код в конструкцию try..catch - компилятор не уверен что код выполнится..
в качестве решения предлагаю сделать что-то вроде такого (пишу в браузере, могут быть косяки):
C#
1
2
3
4
5
6
7
8
9
10
11
textBox2.Text = "";
            SqlInt32 days;
 
            bool res = SqlInt32.TryParse(n, out days);
            if (!res) MessageBox.Show("Введенное количество дней не является целым числом");
            else
            {
               int pr = Convert.ToInt32(comboBox1.SelectedValue);
               SqlInt32 price = pr;
               textBox2.Text += SqlInt32.Multiply(price,days);
            }
1
 Аватар для Lenk@
7 / 7 / 2
Регистрация: 29.04.2010
Сообщений: 21
16.05.2011, 22:38  [ТС]
попробовала.. правда несколько изменила, т.к. иначе не получается
Вместо
C#
1
bool res = SqlInt32.TryParse(n, out days);
написала
C#
1
2
SqlBoolean res;
res = SqlInt32.Parse(n,days);
пишет "No overload for method 'Parse' takes 2 arguments" в этой строчке
res = SqlInt32.Parse(n,days);
0
 Аватар для umnick_kh
311 / 249 / 44
Регистрация: 06.12.2010
Сообщений: 527
16.05.2011, 22:49
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Lenk@, эта ошибка означает,что метод "Parse" не принимает 2 перегрузки. А вы как раз пытаетесь "впихнуть" в него 2 аргумента: "n" и "days".
C#
1
2
3
4
//Или так:
SqlInt32.Parse(n);
//или так:
SqlInt32.Parse(days);
1
 Аватар для Lenk@
7 / 7 / 2
Регистрация: 29.04.2010
Сообщений: 21
16.05.2011, 23:14  [ТС]
Точно!! Теперь работает как нужно!))) я еще там немного подправила..
Всем огромное спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2011, 23:14
Помогаю со студенческими работами здесь

Ошибка в обработчике кнопки - ArrayNodeSceme отсутствует в текущем контексте
private void toolStripBtnCalculate_Click(object sender, EventArgs e) { this.Validate(); ...

Получить индекс массива созданной динамической кнопки в её обработчике
Как получить индекс массива созданной динамической кнопки в её обработчике?

Почему в обработчике событий не выполняется блок If?
private void Combobox1_SelectionChanged(object sender, SelectionChangedEventArgs e) { IsInCheckBox.IsEnabled = true; ...

Почему недоступна кнопка добавления записи из формы?
Всем доброго времени суток! Почему-то недоступна кнопка для создания новой записи из формы. Форма состоит из полей трех таблиц... ...

Как в обработчике нажатия кнопки использовать локальную переменную другого метода?
Нужно чтобы в методе кнопки clicked() можно было использовать переменную db из MainWindow #include "mainwindow.h" #include...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru