Мой первый пост. Я экспериментирую с формой Windows и C++. У меня есть некоторые (основные) вопросы. На данный момент цель состоит в том, чтобы написать программу, которая проверяет, подключено ли какое-либо оборудование через USB-порт, но прежде чем я вернусь к реальной работе, я хотел закончить графический интерфейс, который будет информировать, было ли обнаружено аппаратное обеспечение.
Итак, у меня есть стандартная форма (Form1.h), тогда у меня есть класс cpp, в котором находится основной метод (usbStatus.cpp) и другой файл cpp (connection.cpp), в который я планирую поместить код для поиска требуемого оборудования. Прямо при запуске форма отображает набор statusButton с цветом фона RED и statusLabel с надписью «Поиск аппаратного обеспечения». Тогда я хотел бы, чтобы, когда другой код (еще не написанный) закончен, поиск оборудования изменит цвет фона кнопки на зеленый (если найден HW) и назовите «Hardware found». Ну ... ничего не происходит. Я проверил со следами, и код обрабатывается, но без видимого результата. Я пробовал Invalidate() и Refresh() без успеха.смена кнопки BackColor, C++ Visual Studio 2010
Очень мало я сейчас выглядит так же, как это:
Form1.h
namespace usbStatus{
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Summary for Form1
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}
...
void InitializeComponent(void)
{
...
this->statusButton = (gcnew System::Windows::Forms::ToolStripButton());
this->statusLabel = (gcnew System::Windows::Forms::ToolStripLabel());
....
void InitializeComponent(void)
{
...
}
В конце файла я добавил следующий метод
public: void Form1::UpdateStatusElements(Color color)
{
statusButton->BackColor = color;
if (color == System::Drawing::Color::Green){
//statusprogressBar->Enabled = false;
statusLabel->Text = "Hardware found";
} else {
...
usbStatus.cpp
#include "stdafx.h"
#include "Form1.h"
#include "Connection.h"
using namespace UsbStatus;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
//Application::Run(gcnew Form1());
Form1 ^mainWindow = gcnew Form1();
Application::Run(mainWindow);
if(Connection::GetStatus())
mainWindow->UpdateStatusElements(System::Drawing::Color::Green);
else
//mainWindow->UpdateStatusElements(System::Drawing::Color::Red);
delete mainWindow;
return 0;
}
connection.h
#pragma once
#include "Form1.h"
ref class Connection
{
private:
static void CheckStatus();
static void SetStatus(bool connected);
static bool hwConnected;
public:
static bool GetStatus();
};
connection.cpp
#include <windows.h>
#include "Connection.h"
using namespace UsbStatus;
...
bool Connection::GetStatus()
{
CheckStatus();
return true;
//return hwConnected;
}
Hi Йохен и спасибо за ваше время Вы правы, я переместил если/другое перед командой Run (только для тестирования вам предложение), и это на самом деле обновления, как я пытался сделать – user2673027
У меня такое ощущение, что я не должен вводить какую-либо логику в классы формы больше, чем действительно необходимо для обновления GUI, не нужно ли так думать или я должен придерживаться этого? – user2673027
Лучше решение состоит в том, чтобы разделить логику через интерфейс! Затем вы можете реализовать логику в своем классе и просто передать интерфейс в форму. –