Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поместить данные из текстового поля в статическое (Visual Studio)
 
 автор: JIEXA   (27.01.2007 в 10:55)   письмо автору
 
 

Есть поле(Edit Control), предназначено для ввода числа. Рядом есть кнопка(Button), при нажатии которой введенное число должно вставится в Static text.

У поля Edit control я поставил:
Категория - Value
Virable name - m_num
Остально не менял.

Static text имеет теже настройки что и Edit Control, только имя его m_bnum.

Дальше пишу:

void Cmy7Dlg::OnBnClickedButton1()
{
m_bnum = m_num;
UpdateData(FALSE);
}


И при компеляции выдает ошибку.
Если же написать:

void Cmy7Dlg::OnBnClickedButton1()
{
m_bnum = "test";
UpdateData(FALSE);
}

то всё работает.

Следевательно я неправильно обращаюсь к переменной m_num. Помогите пожалуйста.

  Ответить  
 
 автор: cheops   (27.01.2007 в 12:47)   письмо автору
 
   для: JIEXA   (27.01.2007 в 10:55)
 

1) Это Builder или VC++?
2) Какую ошибку выдаёт компилятор?

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 12:51)   письмо автору
 
   для: cheops   (27.01.2007 в 12:47)
 

1) Microsoft Visual Studio
2)

Compiling...
my7Dlg.cpp
Linking...
my7Dlg.obj : error LNK2001: unresolved external symbol "publicvoid __thiscall Cmy7Dlg::OnEnChangeEdit1(void)" (?OnEnChangeEdit1@Cmy7Dlg@@QAEXXZ)
my7Dlg.obj : error LNK2001: unresolved external symbol "publicvoid __thiscall Cmy7Dlg::OnStnClickedStatic3(void)" (?OnStnClickedStatic3@Cmy7Dlg@@QAEXXZ)
E:\Documents and Settings\JIEXA\Мои документы\Visual Studio 2005\Projects\my7\Debug\my7.exe : fatal error LNK1120: 2 unresolved externals

  Ответить  
 
 автор: cheops   (27.01.2007 в 13:31)   письмо автору
 
   для: JIEXA   (27.01.2007 в 12:51)
 

Хм... а вы как со статическим полем переменную связали? С ним же вроде нельзя связать переменную (в версиях до VC++ по крайней мере)?

  Ответить  
 
 автор: cheops   (27.01.2007 в 15:06)   письмо автору
 
   для: JIEXA   (27.01.2007 в 12:51)
 

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

  Ответить  
 
 автор: cheops   (27.01.2007 в 12:54)   письмо автору
 
   для: JIEXA   (27.01.2007 в 10:55)
 

Если это Builder, но следует писать так
void Cmy7Dlg::OnBnClickedButton1()
{
m_bnum = m_num->Text;
UpdateData(FALSE);
}

В Builder элемент управления не связывается с переменной как в VC++, объект элемента управления сам содержит переменную, получить доступ к которой можно обратившись к свойству Text элемента управления.

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 13:18)   письмо автору
72.9 Кб
 
   для: cheops   (27.01.2007 в 12:54)
 

Странно, походу я где-то ещё допустил ошибку. Посмотрите пожалуйста.

  Ответить  
 
 автор: cheops   (27.01.2007 в 13:35)   письмо автору
 
   для: JIEXA   (27.01.2007 в 13:18)
 

Я к сожалению проект 8 студии не смогу открыть - только 7.0 и 7.1 (у меня CV++ .NET 2003).

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 13:39)   письмо автору
 
   для: cheops   (27.01.2007 в 13:35)
 

А не могли бы вы как-нить объяснить, как мне сделать чтобы к примеру я вводил в поле Edit Control какой-нить текст и при нажатии на кнопку он отображался в поле Static Text?
А то я уже замучался :(. Непонимаю как и чего :(

  Ответить  
 
 автор: cheops   (27.01.2007 в 14:31)   письмо автору
 
   для: JIEXA   (27.01.2007 в 13:39)
 

В обработчик события EN_CHANGE для текстовой области поместите строки
  SetDlgItemText(IDC_STATIC,m_num);
  UpdateData();

Где IDC_STATIC - идентификатор статического элемента управления, а m_num - переменная CString, связанная с текстовым полем.

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 14:39)   письмо автору
 
   для: cheops   (27.01.2007 в 14:31)
 

Мммм. Мне бы другой вариант, просто я поставил перед собой такую задачу, чтобы понять как можно обращатся к элементам формы. Только не через функцию а через переменную

  Ответить  
 
 автор: cheops   (27.01.2007 в 14:44)   письмо автору
 
   для: JIEXA   (27.01.2007 в 14:39)
 

Переменные m_bnum и m_num какой тип имеют?

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 14:51)   письмо автору
 
   для: cheops   (27.01.2007 в 14:44)
 

Вообще изначально я их нигдле не объявлял - m_num и m_bnum это название.
То есть я на поле Edit Control щёлкнул правой кнопкой, выбрал Add Viriable катугорию выбрал value, а Viriable name указал m_num.
Тоже самое я сделал с Static Text.

Возможно это неправильно?
P.S. вообще поидее m_num, m_bnum у меня будут хранить только числовые значения.

  Ответить  
 
 автор: cheops   (27.01.2007 в 14:57)   письмо автору
 
   для: JIEXA   (27.01.2007 в 14:51)
 

Они в заголовочном файл класса диалога, посмотрите в Cmy7Dlg.h - что перед ними стоит? Или когда добавляете при помощи диалогового окна, что в Variable Type помещаете?

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 15:00)   письмо автору
 
   для: cheops   (27.01.2007 в 14:57)
 

а там стоит CString его нельзя изменить почему-то...


public:
CString m_num;
public:
CString m_bnum;
public:
afx_msg void OnBnClickedButton1();
};

  Ответить  
 
 автор: cheops   (27.01.2007 в 15:07)   письмо автору
 
   для: JIEXA   (27.01.2007 в 15:00)
 

Ошибки тогда точно не с этим связаны - у CString оператор = перегружен - смотрите пост выше.

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 15:15)   письмо автору
 
   для: cheops   (27.01.2007 в 15:07)
 

Какой именно пост? А где тогда рыть?

  Ответить  
 
 автор: cheops   (27.01.2007 в 15:17)   письмо автору
 
   для: JIEXA   (27.01.2007 в 15:15)
 

Пост
 cheops   (27.01.2007 в 15:06)

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 15:29)   письмо автору
 
   для: cheops   (27.01.2007 в 15:07)
 

Попробуем так:
Создаю проект. Все компилируется.
Удаляю кнопку Cancel, кнопку OK переименовываю в "Выход". Все компилируется.
Статик "TODO: Place d..." меняю значение атрибута ID на IDC_bnum. Все компилируется.
Нажимаю на Add Viriable в статике. Категорию выбераю Value, имя прописываю m_bnum. Все компилируется.
Добавляю поле Edit Control, ID меняю на IDC_num. Нажимаю на Add Viriable в статике. Категорию выбераю Value, имя прописываю m_num. Все компилируется.
Добавляю кнопку. Добавляю код:

void Cmy9Dlg::OnBnClickedButton1()
{
m_bnum = m_num->Text;
UpdateData(FALSE);
}

Нажимаю компилировать, не компилируется... Пишет:

Generating Code...
Compiling...
my9.cpp
Generating Code...
Build log was saved at "file://e:\Documents and Settings\JIEXA\Мои документы\Visual Studio 2005\Projects\my9\my9\Debug\BuildLog.htm"
my9 - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



Я понимаю что я что-то нетак делаю, а что именно - не понимаю

  Ответить  
 
 автор: cheops   (27.01.2007 в 15:37)   письмо автору
 
   для: JIEXA   (27.01.2007 в 15:29)
 

Нет в VC++ и MFC использовать строку
m_bnum = m_num->Text;

нельзя, используйте
m_bnum = m_num;

Если возникает ошибка и с последней строкой сообщите текст ошибки.

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 15:43)   письмо автору
 
   для: cheops   (27.01.2007 в 15:37)
 

Ура ошибки нету, только статик не отображается и при нажатии на кнопку ничего не проиходит

  Ответить  
 
 автор: cheops   (27.01.2007 в 15:44)   письмо автору
 
   для: JIEXA   (27.01.2007 в 15:43)
 

Замените
UpdateData(FALSE);

на
UpdateData(TRUE);

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 15:46)   письмо автору
 
   для: cheops   (27.01.2007 в 15:44)
 

Не помогло

  Ответить  
 
 автор: cheops   (27.01.2007 в 15:49)   письмо автору
 
   для: JIEXA   (27.01.2007 в 15:46)
 

А если в обработчик кнопки добавить
MessageBox(m_num);

Что-нибудь выводится? Или диалоговое окно MessageBox пустое?

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 15:50)   письмо автору
 
   для: cheops   (27.01.2007 в 15:49)
 

Пустое

  Ответить  
 
 автор: cheops   (27.01.2007 в 15:54)   письмо автору
 
   для: JIEXA   (27.01.2007 в 15:50)
 

А при этом текст в IDC_num имеется? Попробуйте вот так вот написать
void Cmy9Dlg::OnBnClickedButton1()
{
  UpdateData(TRUE);
  m_bnum = m_num;
  UpdateData(TRUE);
}

Или обработайте событие CHANGE текстовой области, поместив туда метод UpdateData() - дело в том, что переменные в объекте диалогового окна обновляются по вызову этого метода и судя по всему у нас просто не заполняется переменная m_num.

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 16:02)   письмо автору
 
   для: cheops   (27.01.2007 в 15:54)
 

Если написать так:

void Cmy9Dlg::OnBnClickedButton1()
{
UpdateData(TRUE);
MessageBox(m_num);
m_bnum = m_num;
UpdateData(TRUE);
}

То в MessageBox текст содержится, а вот static - нет.

  Ответить  
 
 автор: cheops   (27.01.2007 в 16:03)   письмо автору
 
   для: JIEXA   (27.01.2007 в 16:02)
 

Вот в такой обработчик выводит что-нибудь в MessageBox?
void Cmy9Dlg::OnBnClickedButton1()
{
UpdateData(TRUE);
m_bnum = m_num;
MessageBox(m_bnum);
UpdateData(TRUE);
}

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 16:06)   письмо автору
 
   для: cheops   (27.01.2007 в 16:03)
 

Да

  Ответить  
 
 автор: cheops   (27.01.2007 в 16:12)   письмо автору
 
   для: JIEXA   (27.01.2007 в 16:02)
 

Вот как у меня получилось
void Cmy9Dlg::OnBnClickedButton1()
{
UpdateData(TRUE);
m_bnum = m_num;
MessageBox(m_bnum);
UpdateData(FALSE);
}

PS Короче TRUE в UpdateData помещает значение элементов управления в связанные переменные, а FALSE - наоборот обновляет элементы управления в соответствии со значениями связанных переменных.

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 16:17)   письмо автору
 
   для: cheops   (27.01.2007 в 16:12)
 

Ура! Спс!

  Ответить  
 
 автор: JIEXA   (27.01.2007 в 16:34)   письмо автору
 
   для: JIEXA   (27.01.2007 в 16:17)
 

-

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования