Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Значение переменной 
V
    Опции темы
neomax
Дата 3.7.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 22.6.2006

Репутация: нет
Всего: нет



Приветsmile
Написал код, очень простой- один клас и несколько методов. Назначил три переменнъх.
Проблема в том, что присвоенное значение переменной Х в одном методе не передается той же переменной в следуещем  методе.
Для ясности такой пример:

public class Alabala
{
int x;
public void ButtonClick()
{
 int x=4:
}
public void ButtonClick2()
{
x=x+1
}
public void ButtonClick3()
{

message.Text = "x =" + x;
}
}


Результат: x = 0.  А надо x = 5

Заранее благодарен.
 
--------------------
Найпопулярніші оголошення здесь - Безкоштовні оголошення
PM MAIL   Вверх
Дрон
Дата 3.7.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Пользуйся кнопкой Код. Так читать гораздо легче.
Проблема в том, что в ButtonClick() ты объявил локальную перемунную int x и ей присвоил значение 4.

Код

public void ButtonClick()
{
   x=4;  // вот так надо
}
 


--------------------
Да. Именно так.
PM   Вверх
Tror
Дата 3.7.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: 2
Всего: 4



Дрон, а как быть с этим?

Код

public void ButtonClick2()
{
x=x+1
}


Цитата(neomax @  3.7.2006,  13:29 Найти цитируемый пост)
Результат: x = 0.

 
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Дрон
Дата 3.7.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Такого быть не должно (при условии, что ButtonClick2 вызывается до ButtonClick3).
Может ты код здесь не точно привёл или сам что-то не так делаешь smile 


--------------------
Да. Именно так.
PM   Вверх
Wanderer2019
Дата 3.7.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



чтоб все работало можно попробовать написать так:
Код

public class Alabala
{
int x=0;
public void ButtonClick()
{
 x+=4;
}
public void ButtonClick2()
{
x+=1;
}
public void ButtonClick3()
{
message.Text = "x =" + x;
}
}
  

Это сообщение отредактировал(а) Wanderer2019 - 3.7.2006, 16:03
PM ICQ MSN   Вверх
neomax
Дата 3.7.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 22.6.2006

Репутация: нет
Всего: нет



Чтоб стало яснее о чем я спрашиваю, немного кода:

Код

public class ButtonTest : Page
{
    protected RadioButton a1;
    protected RadioButton a2;
    protected RadioButton a3;
    protected Label message;
    protected Button Button4;
    int X1;
    int X2;
    int X3;
   
public void Page_Init(Object sender, EventArgs e)
    {
        EventHandler selectionHandler =
          new EventHandler(RadioChangeQuestion1);
        EventHandler selectHandler =
         new EventHandler(RadioChangeQuestion2);
        EventHandler selHandler =
          new EventHandler(RadioChangeQuestion3);
        EventHandler sHandler =
          new EventHandler(Collback);

        a1.CheckedChanged += selectionHandler;
        a2.CheckedChanged += selectionHandler;
        a3.CheckedChanged += selectionHandle;
       Button4.Click += sHandler;
    }

 public void  RadioChangeQuestion1(Object sender, EventArgs e)
    {
        RadioButton checkedButton = null;
        if (a1.Checked)
        {
            message.Text = "You Clicked the Button For Submit1" + X1;
            checkedButton= a1;
        }
        else if (a2.Checked)
        {
            message.Text = "You Clicked the Button For Submit2";
            checkedButton = a2;
        }
        else if (a3.Checked)
        {
            message.Text = "You Clicked the Button For Submit3";
            checkedButton = a3;
        }
        if (checkedButton != null)
        {
            string y = checkedButton.Text;
            int X1 = Convert.ToInt32(y);
            message.Text = "You Clicked"+ X1; 
         // zdes'  vse normalno, proveril, peremennoj X1 prisvaivaetsa 
        // znachenie najatoj knopki (RadioButton)!!
        }

// Button click event
public  void Collback (Object sender, EventArgs e)
    {
               message.Text = "Сумма" + X1+X2+X3;
    }
}


Цель - при нажатии кнопки възъвается метод public  void Collback, которъй бъ въводил на екран сумму переменнъх. (В данном случае я показал код только с одно переменной)

Фактически результат въвода на екран : Сумма 0. Вопрос: как работать со значениями переменнъх когда они находятся в другом методе? 
--------------------
Найпопулярніші оголошення здесь - Безкоштовні оголошення
PM MAIL   Вверх
Дрон
Дата 3.7.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(neomax @  3.7.2006,  17:14 Найти цитируемый пост)
Вопрос: как работать со значениями переменнъх когда они находятся в другом методе?  

Так, как я и сказал.
Строка 50: 
Код
int X1 = Convert.ToInt32(y);

Здесь ты объявляешь другую переменную X1.
Пиши просто
Код

X1 = Convert.ToInt32(y);



И ещё. Я бы лучше 59 строку написал вот так:
Код
message.Text = "Сумма" + (X1+X2+X3).ToString();

Хотя там у тебя стиль везде жуткий smile 


--------------------
Да. Именно так.
PM   Вверх
Wanderer2019
Дата 3.7.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



Че то я вообще не понимаю как такой код может работать  smile 

Так.. с поверхности...
Код

message.Text = "You Clicked the Button For Submit1" + X1;

X1 - это int... так что 
Код

message.Text = "You Clicked the Button For Submit1" + X1.ToString();



Зздесь:
Код

message.Text = "Сумма" + X1+X2+X3;


надо 
Код

message.Text = "Сумма" +(X1+X2+X3).ToString();
  

Это сообщение отредактировал(а) Wanderer2019 - 3.7.2006, 16:36
PM ICQ MSN   Вверх
neomax
Дата 3.7.2006, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 22.6.2006

Репутация: нет
Всего: нет



Только часть кода.
Код


public class ButtonTest : Page
{
    protected RadioButton a1;
    protected RadioButton a2;
    protected RadioButton a3;
    protected Label message;
    protected Button Button4;
    int X1;
    int X2;
    int X3;
   
public void Page_Init(Object sender, EventArgs e)
    {
        EventHandler selectionHandler =
          new EventHandler(RadioChangeQuestion1);
        EventHandler selectHandler =
         new EventHandler(RadioChangeQuestion2);
        EventHandler selHandler =
          new EventHandler(RadioChangeQuestion3);
        EventHandler sHandler =
          new EventHandler(Collback);

        a1.CheckedChanged += selectionHandler;
        a2.CheckedChanged += selectionHandler;
        a3.CheckedChanged += selectionHandle;
       Button4.Click += sHandler;
    }

 public void  RadioChangeQuestion1(Object sender, EventArgs e)
    {
        RadioButton checkedButton = null;
        if (a1.Checked)
        {
            checkedButton= a1;
        }
        else if (a2.Checked)
        {
            checkedButton = a2;
        }
        else if (a3.Checked)
        {
            checkedButton = a3;
        }
        if (checkedButton != null)
        {
            string y = checkedButton.Text;
            X1 = Convert.ToInt32(y);
            
         // zdes'  vse normalno, proveril, peremennoj X1 prisvaivaetsa 
        // znachenie najatoj knopki (RadioButton)!!
        }

// Button click event
public  void Collback (Object sender, EventArgs e)
    {
             message.Text = "Сумма" +(X1+X2+X3).ToString();
    }
}


Спасибо за комментарии, но вопрос остался для меня не решен.

При нажатии кнопочки възъвается метод Collback , которой въдает сумму переменнъх, которъе прописанъ каждая в своем методе, где ей присваивается индивидуальное значение. С присваиванием значений  все нормально, проверил!. Но с въводом суммъ не получаается. Въводит : Сумма 0. 
По моему непрофоссиональному мнению пременнъм в методе  Collback  не передается ( фактически уже присвоенное) им ранее значение.
Если неправильно пояснил, пожалуйста поправте, только начинаюsmile    

Это сообщение отредактировал(а) neomax - 3.7.2006, 18:14
--------------------
Найпопулярніші оголошення здесь - Безкоштовні оголошення
PM MAIL   Вверх
Дрон
Дата 3.7.2006, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(neomax @  3.7.2006,  17:54 Найти цитируемый пост)
public class ButtonTest : Page

Тьфу, блин! Это ж ASP.NET  smile  smile  smile 
Почему тогда тема не в том разделе?  smile 

Тогда, конечно, не всё так просто. В подробностях объяснять не хочется, но смысл в том, что http это протокол не сохраняющий своего состояния. Т.е. при каждом обращении к странице у тебя создаётся новый объект класса ButtonTest и он, естественно, уже понятия не имеет о том, что в прошлый раз ты присвоил какое-либо значение переменной.

Делать надо так:
Код

public void Page_Init(Object sender, EventArgs e)
    {
       ......

       if(ViewState["X1"] != null) // проверем было ли сохранено значение
       {
           X1 = (int)ViewState["X1"] // восстановим его
       }
    }

public void  RadioChangeQuestion1(Object sender, EventArgs e)
    {
     .......

            X1 = Convert.ToInt32(y);
            ViewState["X1"] = X1; // сохраним значение для следующих вызовов
   }

 


--------------------
Да. Именно так.
PM   Вверх
neomax
Дата 3.7.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 22.6.2006

Репутация: нет
Всего: нет



Спасибо,  Дрон,  въручил smile 
Все работает!
Вот что я добавил:

Код


public  void Collback (Object sender, EventArgs e)
    {
        X1 = Convert.ToInt32(ViewState["X1"]);
        X2 = Convert.ToInt32(ViewState["X2"]);
        X3 = Convert.ToInt32(ViewState["X3"]);
        message.Text = "Сумма" + (X1 + X2 + X3).ToString() ;
     }

   

Это сообщение отредактировал(а) neomax - 3.7.2006, 19:45
--------------------
Найпопулярніші оголошення здесь - Безкоштовні оголошення
PM MAIL   Вверх
ivashkanet
Дата 4.7.2006, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



По поводу 
Цитата(neomax @  3.7.2006,  16:14 Найти цитируемый пост)
message.Text = "Сумма" + X1+X2+X3;

Ошибок здесь не будет, но результат буден несколько отличный от ожидаемого.
Если х1=1, х2=2, х3=3, то результатом будет "Сумма123". Вместо ожидаемого "Сумма6" smile 
Все очень просто, вычисление выражения происходит слева на право. 
Вот и получается:
1 действие. "Сумма" + 1 = "Сумма1"
2-е. "Сумма1" + 2 = "Сумма12" 
....
Чтобы все было как ожидается нужно, как уже говорили, написать скобки. А еще лучше использовать Метод ToString(), а не поручать компилятору разбираться в том что ты хотел этой строчкой сделать. Ваши мнения могут не совпасть  smile 
 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.4518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.