#c #visual-studio #winforms #oop
#c #visual-studio визуальная студия #винформы #ооп #visual-studio #winforms
Вопрос:
я разработчик на чистом c, для выполнения задачи требуется графический интерфейс, поэтому мне пришлось перейти на c для этого (visual studio 2019).
очень простая проблема, которая сводит меня с ума…
в файле cpp у меня есть значения, которые меняются со временем. эти значения должны быть показаны в расширенном текстовом поле, определенном в файле winform h.
моя неудачная попытка заключается в следующем:
вызов функции в файле cpp:
insertText(logText);
Сама функция:
void insertText(System::Windows::Forms::RichTextBox^ logText)
{
logText->Text = "%f" range;
}
Функция в файле .h:
public: System::Void logText_TextChanged(System::Object^
sender, System::EventArgs^ e) {
}
исходя из C, объектно-ориентированный подход не является моей «чашкой чая», поэтому, пожалуйста, извините меня за мои базовые знания.
ошибка заключается в том, что «идентификатор txtLog не определен.
меня попросили объяснить, что я подразумеваю под «значениями, которые меняются со временем»:
физический датчик определяет, входит ли злоумышленник в защищенный периметр. на запрос, который моя программа c отправляет датчику каждую секунду, отвечает ответ — «все в порядке» или с указанием дальности и азимута.
каждый раз, когда происходит обнаружение злоумышленника, мне нужно передать диапазон и азимут в logTxt.
Комментарии:
1. Вы пытаетесь добавить текст или заменить существующий? Чтобы добавить текст (поскольку вы используете C / CLI), вы можете написать
logText->AppendText(range.ToString() "n");
(еслиrange
это еще не строка). Неясно, как здесь задействованоTextChanged
событие. Это событие возникает при изменении текста элемента управления. у меня есть значения, которые меняются со временем : как? Используя таймер, другие события, генерируемые чем-то другим?2. Дорогой Джими, спасибо за твой комментарий. я хотел бы добавить к новой строке. можете ли вы указать мне, куда мне нужно вставить код в вашем комментарии? также, как уже говорилось, ошибка возникает из функции, вызывающей insertText (logText), которая находится в файле cpp. изменения значения происходят при обнаружении злоумышленника. если злоумышленник обнаружил, что вычисление дальности и азимута выполнено, а затем я намеревался обновить logTxt новыми переменными (range и azimuth)
3. Вы также можете написать
logText->AppendText(String::Format("{0}n", range));
илиlogText->AppendText(range "n");
, если они выглядят лучше :). — Вам нужно описать возникшую у вас ошибку, для чего используется этот.cpp
файл. Вполне вероятно, что оттуда, откуда вы пытаетесь вызватьinsertText(logText);
, никто не знает оlogText
или его классе контейнера формы). Дайте некоторый контекст вашему вопросу. Что на практике означает изменение значений с течением времени . Как / когда это произойдет. Добавьте эти подробности в свой вопрос, а не в комментарии.4. Спасибо, Джими. вы правильно подвели итог — «никто не знает о logText». что касается контекста, я описал его в своем ответе на ваш комментарий.
5.Да, верно, это то, что вы делаете, как вы это делаете, все еще отсутствует. Является ли это
.cpp
классом, содержит ли он статические методы (возможно, вы заметили, что статический метод и члены экземпляра не очень хорошо ладят друг с другом из коробки). Как вы получаете эти уведомления, есть ли у вас обратные вызовы там? Как они выглядят? — Возможно, вы также заметили, что в вашей точке входа (void main() в[Project].cpp
) у вас естьApplication::Run(gcnew [NameSpace]::SomeForm());
. Экземпляр этой формы может быть передан другому классу. Добавьте#include "SomeForm.h"
в свой.cpp
файл…