我刚刚受雇于这家公司,帮助他们为他们正在开发的数控机床编写一些c#代码。我目前正在工作的部分是有一个插件运行,将在这个软件上运行,这个软件是由第三方公司制作的,他们从第三方公司获得了他们机器的部件。该插件有两个windows窗体,一个是主要窗体,用于完成GUI所需的大部分工作,另一个是调试窗体,用于帮助测试。他们最近不得不更新用于运行插件的shell,现在只有调试窗体在运行时才会实际加载。在"PrimaryForm.cs“中
public partial class PrimaryForm : Form
{
//...
//the debug form is declared here
DebugForm DebugForm = new DebugForm();
//...
}我这里有一个断点,但它从未命中过
但是,唯一命中的断点是在"DebugForm.cs“文件中
public partial class DebugForm: Form
{
public DebugForm()
{
//the following method is called in the DebugForm.Desiger.cs file
InitializeCompnent();
}
//...
}(请记住,目前还没有人真正做过这方面的工作,都是EE或CE的人,所以在任何地方都可以看到零约定)我猜测dll只是出于某种原因而告诉运行插件的应用程序加载debugForm。这两个表单类也都是公共的,所以我不确定为什么根本不加载primaryForm。在visual studio中,包含表单文件和所有内容的整个项目都作为dll输出,所以我认为它们应该在同一个文件中。
Edit:更多地解释一下,问题甚至不一定是dll首先运行DebugForm load_event(),而是它首先运行DebugForm的构造函数,并且只运行该构造函数,然后运行load_event()。
发布于 2021-01-01 02:17:09
当我创建一个新的windows窗体应用程序时,它从主窗体Program.cs开始
static void Main()
{
Application.Run(new PrimaryForm());
}然后我会从事件中加载额外的表单。在这种情况下,主表单同时加载。表单PrimaryForm
private void PrimaryForm_Load(object sender, EventArgs e)
{
Form DebugForm = new DebugForm();
DebugForm.Show();
}我确实遇到了.bat加载第二个表单而不是第一个表单的情况。它最终成为主窗体加载事件中的一个bug,调试器没有注意到它,但它继续加载第二个窗体。它只是没有显示()我的初选。
发布于 2021-01-05 00:36:50
所以问题似乎出在第三方应用程序上。我的同事在我开始任何工作之前就设置了它,他意外地告诉应用程序查找调试窗体,这就是为什么它首先加载它,而不是其他任何东西,除非在代码中特别调用。
https://stackoverflow.com/questions/65524135
复制相似问题