二次继承UIForm后,启动窗体不能自动居中 而是跑到了左上角(left=0 top=0)
SunnyUI 版本号
哪个版本号?
V3.3.3.0
SunnyUI 引用来源
Nuget
操作系统
Win10
其他
.Net Framework4.7.2
我创建了第一个窗体 public partial class BaseForm : UIForm
然后我有创建了继承的窗体, public partial class FmMain : CRM.BaseForm
startposition:'CenterScreen' 在属性页面都设置的是 居中。
窗体没有任何额外操作,比如拖拉控件,就单纯 建立一个模板而已。
program.cs 如果 以 BaseForm 为主窗体 启动 这个窗体 会自动居中 ,但 是如果修改为 FmMain做为主窗体启动中时,这个窗体不会自动居中,而是以left=0 top=0 的位置停靠
问题贴图
请贴出发生问题时候的截图:
---输入图片说明
输入图片说明
问题代码
请贴出发生问题时候的代码:
BaseForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sunny.UI;
namespace CRM
{
public partial class BaseForm : UIForm
{
public BaseForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
FmMain.cs
using System.Text;
using System.Windows.Forms;
namespace CRM
{
public partial class FmMain : CRM.BaseForm
{
public FmMain()
{
InitializeComponent();
}
}
program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CRM
{
internal static class Program
{
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new BaseForm()); //这个自动居中
Application.Run(new FmMain()); //这个就跟: left=0 top=0 的位置显示
}
}
}
==========================
期待结果
期待的结果是? 一个是次基类,一个继承的窗体,无论以谁为主窗体启动,他们既然设置了 centerScreen 就该
居于窗口的正中位置。
为什么直接继承 UIForm的窗体可以居中,而从此再二次继承的就直接居左上角显示 ?
https://foruda.gitee.com/images/1679020561145293666/fdba237d_11240382.png
跟继承没有关系
你两个窗体StartupPosition属性设置的不一致
另外看看代码里有没有直接给Location赋值的代码,如果有,那StartupPosition属性就不起作用了,位置被挪动了
该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的信息,可能是因为您的 FmMain 窗体的 StartPosition 属性没有正确设置为 CenterScreen。请在 FmMain 窗体的设计视图下,选中窗体本身,然后在属性窗口中找到 StartPosition 属性,将其设置为 CenterScreen,保存后再运行应用程序。如果仍然无法解决问题,请检查您的 FmMain 窗体是否有其他代码影响了窗体位置。
StartupPosition怎么设置的
该回答引用ChatGPT,希望能对你有帮助,你试试看看能不能解决问题
可能需要进行以下几个改进:
在Program.cs文件中,你运行了两次Application.Run方法,分别创建了BaseForm和FmMain窗体实例,但是在这种情况下,只会运行FmMain窗体,因为它是最后一个运行的窗体实例。因此,你需要修改这个文件,只运行FmMain窗体实例。
在FmMain.cs文件中,你没有在构造函数中调用InitializeComponent方法,这可能会导致窗体无法正确地初始化。因此,你需要在FmMain构造函数中调用InitializeComponent方法。
在BaseForm.cs文件中,你可以重命名Form1_Load方法,因为它的命名不符合方法的实际用途。你可以考虑将其重命名为BaseForm_Load或类似的名称。
参考GPT和自己的思路:
根据您提供的代码和情况分析,可能是因为在运行 FmMain
窗体时,已经运行了一个窗体(BaseForm
)并且他已经被关闭的问题导致的。在 Program.cs
中,您连续运行了两个窗体,当第一个窗体关闭时,程序会正常退出。但是在运行 FmMain
窗体时,由于前一个窗体已经关闭,程序不认为有一个主窗体并且没有页面居中显示。
要解决这个问题,可以将 FmMain
窗体实例化为一个变量,然后用 Application.Run()
运行它,而不是一个连续的 Application.Run()
:
FmMain fmMain = new FmMain();
Application.Run(fmMain);
这样,无论哪个窗体是主窗体,都应该居中显示了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CRM
{
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
FmMain fm = new FmMain();
fm.StartPosition = FormStartPosition.CenterScreen;
Application.Run(fm); //这个就自动left=0 top=0 的位置显示
// BaseForm fmm = new BaseForm();
//Application.Run(fmm ); //这个自动居中
}
}
}
```c#
```
问题仍旧没有解决。
location 我没有动。
startpostion 都 是 CenterScreen
其实我就是做个模板,设置一个ICON ,在模板基础上创建新窗体。新窗体就不用设置ICON了