我用C ++(CLR)编写应用程序。它是一个带有表单的应用程序。
我有两种表单:MainForm
和ExtensionsForm
。程序启动时会显示MainForm
。单击该按钮后,将创建ExtensionsForm
。
我也有这些文件:MainForm.h
,MainForm.cpp
,ExtensionsForm.h
,ExtensionsForm.cpp
。
要创建表单ExtensionsForm
,我已将其添加到文件MainForm.h
的开头:
#pragma once
#include "ExtensionsForm.h" // <-- added
在MainForm
按钮onClick事件处理程序中打开ExtensionsForm
我添加了这个:
ExtensionsForm^ extensionsForm = gcnew ExtensionsForm();
extensionsForm->ShowDialog();
此代码正常运行。
但是,点击MainForm
中的按钮后,我需要对ExtensionsForm
的外观进行一些更改。我该如何正确实现?
提前谢谢!
我的尝试
我已在MainForm
中创建了方法(功能),并尝试在ExtensionsForm
中调用此方法。我可以使用构造函数来传递引用,但无论如何我有一个错误:
如何解决这个问题?
我的解决方案
我在*.h
文件中包含了所有Main.cpp
个文件。在Main.cpp
里面我有这个:
#include "MainForm.h"
#include "ExtensionsForm.h"
之后,如果我想在另一个表单上进行更改(例如,我可以按ExtensionsForm
上的按钮并且更改必须出现在MainForm
),我可以这样做:
我可以在public
中创建MainForm.h
方法,这会对此表单进行一些更改。我的例子:
public: void updateButton(int amount, int maxAmount) {
button->Text = amount + " / " + maxAmount;
}
public: void updateTextBox(String^ text) {
textBox->Text = text;
}
要显示新表单,我可以使用MainForm.cpp
中的方法。我的例子:
#include "MainForm.h"
#include "ExtensionsForm.h"
namespace FileFinder {
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
FileFinder::MainForm mainForm;
Application::Run(%mainForm);
return 0;
}
void MainForm::buttonExtensions_Click(System::Object^ sender, System::EventArgs^ e) {
ExtensionsForm^ extensionsForm = gcnew ExtensionsForm();
extensionsForm->Owner = this;
extensionsForm->ShowDialog();
}
}
此处实现(定义)方法buttonExtensions_Click
。它还有MainForm.h
中的定义:
private: void buttonExtensions_Click(System::Object^ sender, System::EventArgs^ e);
这非常有效,但您必须在*.cpp
文件中实现(定义)您的方法,该文件包含您的*.h
文件或此*.h
文件(定义必须存在)。您也可以在此方法中看到extensionsForm->Owner = this;
。这对于下一步是必要的。
在这之后,您可以在ExtensionsForm.h
:
private: void buttonConfirmExtensions_Click(System::Object^ sender, System::EventArgs^ e) {
MainForm^ mainForm = (MainForm^)this->Owner;
mainForm->updateButtonExtensions(checkedExtensionsCount, extensionsCount);
mainForm->updateTextBoxExtensions(textBoxExtensionsString);
this->Close();
}
您可以通过MainForm
获取Owner
并使用此表单中定义的public
方法。这就是全部。
答案 0 :(得分:-1)
通过将一些代码重新定位到.cpp
文件来解决这个问题。
Hans Passant,谢谢你的建议。