gpt4 book ai didi

c# - 在 C# cf 中显示下一个表单后尝试关闭一个表单

转载 作者:太空狗 更新时间:2023-10-29 21:34:57 27 4
gpt4 key购买 nike

我最近一直在研究 Android,我试图将它的一个功能移植到 C# 紧凑框架。

我所做的是创建一个称为 Activity 的抽象类。这个类看起来像这样

  internal abstract class Activity
{
protected Form myForm;
private static Activity myCurrentActivity = null;
private static Activity myNextActivity = null;

internal static void LoadNext(Activity nextActivity)
{
myNextActivity = nextActivity;
if (myNextActivity != null)
{
myNextActivity.Show();
if (myCurrentActivity != null)
{
myCurrentActivity.Close();
myCurrentActivity = null;
}
myCurrentActivity = myNextActivity;
myNextActivity = null;
}
}

internal void Show()
{
//PROBLEM IS HERE
Application.Run(myForm);
//myForm.Show();
//myForm.ShowDialog();
//
}

internal void Close()
{
myForm.Close();
}


internal void GenerateForm()
{
///Code that uses the Layout class to create a form, and then stores it in myForm
//then attaches click handlers on all the clickable controls in the form
//it is besides the point in this problem
}

protected abstract void Click(Control control);
//this receives all the click events from all the controls in the form
//it is besides the point in this problem

}

我遇到的问题是运行 Show() 命令的一部分

基本上我所有的类都实现了上面的类,加载一个xml文件并显示出来。当我想转换到一个新的类/形式时(例如从 ACMain 到 ACLogIn)我用这个代码

Activity.LoadNext(new ACLogIn);

应该加载下一个表单,显示它,然后卸载当前表单

我已经尝试了这些解决方案(在 Show() 方法中),这是每个解决方案的问题

  1. 使用 myForm.ShowDialog()
    这行得通,但会阻塞执行,这意味着旧表单不会关闭,而且我在表单之间移动的越多,进程堆栈增加的越多

  2. 使用 myForm.Show()
    这有效,在显示旧窗体后关闭旧窗体,但紧接着关闭程序并终止它

  3. 使用 Application.Run(myForm)
    这仅适用于加载的第一个表单,当我移动到下一个表单时,它会显示它然后抛出一个异常,提示“值不在预期范围内”

有人可以帮我解决这个问题或找到替代方案吗?

最佳答案

如果您真的想为此导航创建自己的框架,则需要重新思考。传递给 Application.Run 的 Form 实例绝不能关闭 - 当它关闭时,Application.Run 完成执行并且(通常)您的 static void Main 入口点退出并且应用程序终止.

我建议您将 Activity 更改为 UserControl:

public abstract class Activity : UserControl
{
....
}

或作曲

public abstract class Activity
{
private UserControl m_control;
....
}

然后不是关闭和显示表单,而是将主表单中的 所有 事件作为容器作为父级。

作为公平警告,当您开始想要以 Tab 主题而不是 Stack 或 Split View显示内容时,这将变得复杂。框架看起来很容易创建,但实际上并非如此,所以我至少会考虑使用已经完成的东西,除非你有令人信服的理由想要自己动手。

关于c# - 在 C# cf 中显示下一个表单后尝试关闭一个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com