Как отправить строку из cpp в текстовое поле, определенное в заголовке winform

#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 файл