在C ++ Windows窗体应用程序中打开新窗体

扎赫拉(Zahra rah)

我正在使用Visual Studio 2012在C ++中使用Windows窗体。我已从此链接获得帮助找不到C ++的Windows窗体应用程序

我想要多种形式。我已经设计了Form2并将Form2.h包含在Form1.h中。但是,当我打开form2时,它会出现并立即消失。这是我的代码:

#include "Form2.h"
...

private: System::void button_Click(System::Object^ sender, System::EventArgs^ e){
    Form2 frm2;
    frm2.Show();
    //this->Hide();
    //this->Close();
}

如果我用

this->Hide();

这两个表单将隐藏,如果我关闭form1

this->Close();

form2也将关闭。

我想独立打开和关闭表格。我必须做什么?

任何帮助,将不胜感激

汉斯·帕桑特

令人惊讶的是,如何在VS2012中删除项目模板立即使每个人都写错了代码。您正在使用“堆栈语义”,它是C ++中RAII模式的仿真。换句话说,当button_Click()返回时,您的Form2实例将立即被销毁。正确的代码如下:

   Form2^ frm2 = gcnew Form2;
   frm2->Show();

创建Form1实例的代码中完全存在相同的错误,您必须通过才能看到该错误%form1它不太明显,因为您的Main()方法在应用程序的生命周期内一直执行。但是,Form1类的析构函数将被调用两次。当您更改默认值时,往往会造成严重破坏。相同的配方,不要使用堆栈语义:

   Form1^ mainWindow = gcnew Form1;
   Application::Run(mainWindow);

或者只是:

   Application::Run(gcnew Form1);

当您致电时,您的应用程序会立即终止,this->Close()因为您正在关闭应用程序的主窗口。发生这种情况是因为您将Form1实例传递给Application :: Run()。这与绝大多数Windows应用程序的行为方式兼容,关闭“主窗口”将结束应用程序。

但这不是您想要的,所以不要将表单实例传递给Run()。您需要为您的应用程序设置另一个退出条件,通常情况下,您将需要“当没有更多窗口可用时”条件。更改您的Main()方法,使其看起来像这样:

void OnFormClosed(System::Object ^sender, System::Windows::Forms::FormClosedEventArgs ^e) {
    Form^ form = safe_cast<Form^>(sender);
    form->FormClosed -= gcnew FormClosedEventHandler(&OnFormClosed);
    if (Application::OpenForms->Count == 0) Application::Exit();
    else Application::OpenForms[0]->FormClosed += gcnew FormClosedEventHandler(&OnFormClosed);
}

[STAThread]
int main(array<System::String ^> ^args) {
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);
    Form1^ startupWindow = gcnew Form1;
    startupWindow->FormClosed += gcnew FormClosedEventHandler(&OnFormClosed);
    startupWindow->Show();
    Application::Run();
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C Sharp Windows窗体应用程序中从窗体2修改窗体3中的值

来自分类Dev

C#-Windows窗体应用程序-保存文件

来自分类Dev

仅使用Windows窗体应用程序的C#游戏

来自分类Dev

C#打印Windows窗体应用程序

来自分类Dev

C#Windows窗体应用程序关闭

来自分类Dev

如何使C#Windows窗体应用程序适合屏幕

来自分类Dev

当用户使用C#中的Windows窗体应用程序单击按钮时如何打开网页?再次单击时不应打开多个页面

来自分类Dev

覆盖C#Windows应用程序窗体中的透明图片框?

来自分类Dev

如何在C#Windows窗体应用程序中激活spellCheck?

来自分类Dev

如何在C#Windows窗体应用程序中动态创建网格

来自分类Dev

在Windows窗体应用程序vb.net中存储敏感数据的建议C#

来自分类Dev

如何在C#Windows窗体应用程序中创建平滑的形状动画运动?

来自分类Dev

如何在C#中从Windows窗体应用程序项目设置.dll文件的路径?

来自分类Dev

SQL命令在C#Windows窗体应用程序中不起作用

来自分类Dev

在C#Windows窗体应用程序中以编程方式继承表

来自分类Dev

在Windows窗体应用程序vb.net中存储敏感数据的建议C#

来自分类Dev

Windows 窗体应用程序中的 C# WYSIWYG HTML 编辑器

来自分类Dev

在 Windows 窗体 C# 应用程序中创建可滚动按钮列表面板

来自分类Dev

在 C# Windows 窗体应用程序中裁剪受密码保护的 pdf

来自分类Dev

我在 Visual Studio 2017 中没有找到 windows 窗体应用程序 C#

来自分类Dev

将 C# Windows 窗体中的应用程序与 firebird 数据库(LAN 网络)连接

来自分类Dev

contextMenuStrip 在 Margin C# Windows 窗体应用程序中添加符号

来自分类Dev

将SQLite Windows窗体应用程序迁移到通用Windows应用程序(C#)

来自分类Dev

(C# Windows 窗体应用程序)如何重新启动应用程序

来自分类Dev

如何在 ToolStripMenuItems 中访问 C# windows 窗体应用程序中的子菜单项内的项目?

来自分类Dev

如何在设计器模式下调整Windows窗体应用程序的大小?(Visual Studio 2013中的C#)

来自分类Dev

vsto:使用C#在相同的解决方案中从Windows窗体应用程序迁移不同的excel工作簿

来自分类Dev

为列表框中的每个项目添加价格-C#.Net,Windows窗体应用程序

来自分类Dev

我如何获得素数(C#Windows窗体应用程序中的哥德巴赫猜想)

Related 相关文章

  1. 1

    如何在C Sharp Windows窗体应用程序中从窗体2修改窗体3中的值

  2. 2

    C#-Windows窗体应用程序-保存文件

  3. 3

    仅使用Windows窗体应用程序的C#游戏

  4. 4

    C#打印Windows窗体应用程序

  5. 5

    C#Windows窗体应用程序关闭

  6. 6

    如何使C#Windows窗体应用程序适合屏幕

  7. 7

    当用户使用C#中的Windows窗体应用程序单击按钮时如何打开网页?再次单击时不应打开多个页面

  8. 8

    覆盖C#Windows应用程序窗体中的透明图片框?

  9. 9

    如何在C#Windows窗体应用程序中激活spellCheck?

  10. 10

    如何在C#Windows窗体应用程序中动态创建网格

  11. 11

    在Windows窗体应用程序vb.net中存储敏感数据的建议C#

  12. 12

    如何在C#Windows窗体应用程序中创建平滑的形状动画运动?

  13. 13

    如何在C#中从Windows窗体应用程序项目设置.dll文件的路径?

  14. 14

    SQL命令在C#Windows窗体应用程序中不起作用

  15. 15

    在C#Windows窗体应用程序中以编程方式继承表

  16. 16

    在Windows窗体应用程序vb.net中存储敏感数据的建议C#

  17. 17

    Windows 窗体应用程序中的 C# WYSIWYG HTML 编辑器

  18. 18

    在 Windows 窗体 C# 应用程序中创建可滚动按钮列表面板

  19. 19

    在 C# Windows 窗体应用程序中裁剪受密码保护的 pdf

  20. 20

    我在 Visual Studio 2017 中没有找到 windows 窗体应用程序 C#

  21. 21

    将 C# Windows 窗体中的应用程序与 firebird 数据库(LAN 网络)连接

  22. 22

    contextMenuStrip 在 Margin C# Windows 窗体应用程序中添加符号

  23. 23

    将SQLite Windows窗体应用程序迁移到通用Windows应用程序(C#)

  24. 24

    (C# Windows 窗体应用程序)如何重新启动应用程序

  25. 25

    如何在 ToolStripMenuItems 中访问 C# windows 窗体应用程序中的子菜单项内的项目?

  26. 26

    如何在设计器模式下调整Windows窗体应用程序的大小?(Visual Studio 2013中的C#)

  27. 27

    vsto:使用C#在相同的解决方案中从Windows窗体应用程序迁移不同的excel工作簿

  28. 28

    为列表框中的每个项目添加价格-C#.Net,Windows窗体应用程序

  29. 29

    我如何获得素数(C#Windows窗体应用程序中的哥德巴赫猜想)

热门标签

归档