【问题标题】:How Do You Edit a Second (Non-Main) C# Form Window In Visual Studio Designer?如何在 Visual Studio 设计器中编辑第二个(非主)C# 窗体窗口?
【发布时间】:2022-08-04 05:32:22
【问题描述】:

我正在 Visual Studio 中编写 C# Windows 窗体程序。我有一个按钮,可以创建并显示(打开)一个名为 VideoWindow 的新表单(窗口)。我可以在 Visual Studio 的设计工作区中编辑 MainWindow,这使我可以直观地编辑其内容。但是,我找不到用 VideoWindow 做同样事情的方法。我尝试右键单击 VideoWindow 并单击 View Designer,但它只是将我带到 MainWindow 设计器。如何打开第二个 VideoWindow 的设计器?这可能吗?下面是创建和打开新表单的代码:

    private void ButtonWindow(object sender, EventArgs e)
    {
        Form VideoWindow = new Form();
        VideoWindow.Size = new Size(500, 300);
        VideoWindow.Show();
    }
  • 在设计器中,您只需添加一个新表单并将其命名为 VideoForm 并添加控件等。在您的代码中,您将其初始化 VideoForm vf = new VideoForm(); vf.Show();
  • @LarsTech 因此,如果您不通过 Visual Studio GUI 创建表单,而只是手动编写 class.cs 文件,那么是否无法为该新表单类调用设计器?
  • 我不知道您所说的manually write a class.cs file 指的是创建新表单是什么意思。
  • @LarsTech 我的意思是您可以通过单击 Project -> Add Form 在 Visual Studio 中创建一个新表单,这将创建新的 form.cs 文件并使用样板文件填充它,并可能将其连接到 GUI 设计器。相反,可以只创建名为 form.cs 的文本文件(我假设是 form.Designer.cs)并手动编写所需的代码来创建从 Form 继承的类,并通过 Project -> Add existing item 将它们添加到项目中。如果这样做,您将无法访问该表单类的设计器
  • 好的,我刚刚对其进行了测试,并且已经回答了我自己的问题。如果您手动创建类似 TestForm.cs 并让类继承自 System.WindowsForms 窗体,然后按 Shift F7,即使没有 TestForm.Designer.cs 文件,Visual Studio 也会为该窗体启动 GUI 设计器。然后它将自动在 TestForm.cs 中创建 InitializeComonent 方法,并在该方法中添加 SuspendLayout、窗口大小、名称和 ResumeLayout 属性。在这种安排下,设计器元素不会像往常一样在单独的 form.Designer.cs 文件中与类定义分开

标签: c# .net visual-studio winforms designer


【解决方案1】:

可以自定义一个新的表单,修改后创建对应的对象。以下是相关步骤:

1.新建表单videoform

2.相关代码:

.Show();.ShowDialog(); 注意两者的区别。

private void button1_Click(object sender, EventArgs e)
{
    VideoWindow videoWindow = new VideoWindow();
    videoWindow.Show();
    //videoWindow.ShowDialog();
}

3.输出:

【讨论】:

  • 谢谢,这有效,但我还有一个问题。为什么新的 Videoform 类不像 MainWindow 那样从 Form 类继承?
【解决方案2】:

经过一些测试,我发现可以为手动创建的表单类访问基于 Visual Studio GUI 的设计器(即不是通过通常的项目 -> 添加表单向导创建的)。

如果您在项目中创建一个 CustomForm.cs 文件并让该类继承自 Form (System.Windows.Forms),然后按 Shift F7,Visual Studio 将为该表单创建一个 GUI 设计器。

它还将自动在 CustomForm.cs 中创建 InitializeComonent 方法,并在该方法中添加 SuspendLayout 和 ResumeLayout 调用以及客户端大小和名称属性。

在这种安排下,设计器元素不会像往常一样在单独的 form.Designer.cs 文件中与类定义分开。通过 Designer GUI 进行的任何更改都将直接影响 CustomForm.cs。当然,这不太理想,因为开发人员破坏表单的可能性更高,因为自动生成的代码与手动编写的代码混合在一起。

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多