在Visual Studio中使用C++中的WinForms从一个窗体切换到另一个窗体

zwghvu4y  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(278)

我在Windows 10平台上有Visual Studio 2022,虽然我已经用它来开发C代码有一段时间了,但我还是第一次使用它来使用Win Forms开发GUI。我一直在看一些在线教程,有一些问题。
我的应用程序有三个表单,登录表单,编码表单和解码表单,分别是LoginForm. h,EncodeForm. h和DecodeForm. h。我已经使用设计视图为每个表单设计了这些表单,并且工作正常。在下面的教程中,LoginForm. cpp包含以下代码:

  1. #include "LoginForm.h"
  2. using namespace myFirstSteganGUI;
  3. void main() {
  4. Application::EnableVisualStyles();
  5. Application::SetCompatibleTextRenderingDefault(false);
  6. Application::Run(gcnew LoginForm());
  7. }

字符串
其中EncodeForm.cpp和DecodeForm.cpp仅包括它们各自的头文件,而没有其他内容。
登录表单包含几个控件,这里相关的两个控件是“Encode”(按钮3)和“Decode”(按钮4),因此当您单击其中一个控件时,应用程序会将您带到编码或解码表单。
在LoginForm. h的设计视图中,我双击“Encode”和“Decode”,在这两种情况下,我都在LoginForm. h的代码末尾附近的生成函数中包含代码。代码如下:

  1. private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
  2. EncodeForm obj;
  3. obj.ShowDialog();
  4. }
  5. private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
  6. DecodeForm obj;
  7. obj.ShowDialog();
  8. }


同时在#pragma之后插入#include“EncodeForm. h”和#include“DecodeForm. h”一次。应用程序正确编译,并打开登录表单,然后当我点击“编码”时,编码表单确实打开,但登录表单保持打开状态,我希望它关闭。这是问题1。如果我关闭编码表单,那么我可以点击“解码”,解码表单打开,但与之前一样,登录按钮保持打开。
我希望能够从编码或解码表单切换回登录表单,并在两个表单上都有按钮“返回登录”。在“EncodeForm. h”设计视图中,我尝试了与LoginForm. h相同的方法,即双击“返回登录”,然后在生成的函数中插入代码,如下所示:

  1. private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
  2. LoginForm obj;
  3. obj.ShowDialog();
  4. }


并在#pragma下面插入了#include“LoginForm. h”一次。然而,这并没有编译,并产生了几个难以理解的错误。可以肯定的是,同样的问题也会发生在解码表单上,我没有尝试。这是问题2。
作为测试,我在尝试上述更改之前更改了LoginForm.cpp,结果代码为:

  1. #include "LoginForm.h"
  2. #include "EncodeForm.h"
  3. #include "DecodeForm.h"
  4. using namespace myFirstSteganGUI;
  5. void main() {
  6. Application::EnableVisualStyles();
  7. Application::SetCompatibleTextRenderingDefault(false);
  8. Application::Run(gcnew LoginForm());
  9. Application::Run(gcnew EncodeForm());
  10. Application::Run(gcnew DecodeForm());
  11. }


登录表单确实出现了,然后在我关闭登录表单后出现了编码表单,然后在我关闭编码表单后出现了解码表单。这确实是我所期望的,虽然不是我想要的,但至少可以让我看到这些表单是如何显示的。
我的问题是:
1:从登录表单中,我希望出现编码或解码表单,并关闭登录表单。目前登录表单未关闭。
第二章:无论是从编码或解码形式,我希望登录形式重新打开其原始状态保留,即与登录代码,当“返回登录”被点击,和编码或解码形式关闭。他们不需要保留自己的状态。
我相信一定有一个简单的答案,我只是不太了解Visual Studio如何使用Win Forms。

zte4gxcn

zte4gxcn1#

如果不是登录表单实际关闭,而是对话框不显示,是否可以接受?如果可以,那么一个相对简单的解决方案是在显示Encode或Decode表单之前使用Login表单的Hide()方法。例如,

  1. private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
  2. EncodeForm obj;
  3. Hide();
  4. obj.ShowDialog();
  5. }

字符串
接下来,将Login表单的引用存储在可从Encode和Decode表单访问的地方,例如在全局变量中,例如objLogin。这可以通过各种方式设置,例如从LoginForm构造函数。或者,为了使其更灵活且易于扩展,您可以按照Louis Go的评论中的建议进行操作,即创建一个可访问的回调来使用。
然后在“Back to Login”按钮的Encode/Decode表单处理程序中,调用Login表单的Show()方法(例如,objLogin.Show();),然后调用Close();来关闭此表单(如果Login表单仍然在其Click方法中显示Encode/Decode表单有任何问题,也可以反过来)。

相关问题