- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 visual studio 2012 在 C++ 中处理 Windows 窗体。我已从此链接获得帮助 Can't find Windows Forms Application for C++
我想要多种形式。我设计了 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;
}
关于c++ - 在 C++ Windows 窗体应用程序中打开新窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38869136/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!