C# 不使用visual studio designer绘制形状。不显示形状和不触发事件

C# 不使用visual studio designer绘制形状。不显示形状和不触发事件,c#,C#,我只是尝试在不使用VisualStudio功能的情况下绘制一些形状,大多数教程都使用这种功能,我有理由相信编码会因此而有所不同,所以最后的办法就是在这里提问 遵循一些表单指南,没有使用任何VisualStudio(是的,我知道使用它要容易得多,但使用这些东西在过去让我很苦恼,所以想不学习)我制作了表单等等,但是当涉及到实际绘制形状时,我撞到了墙 我做了一些调试,根据我所能确定的,事件根本不会触发。主函数中的图形代码什么也不做,只显示一个空白表单。 我在主代码和事件代码上都尝试了一些变体,这在代码

我只是尝试在不使用VisualStudio功能的情况下绘制一些形状,大多数教程都使用这种功能,我有理由相信编码会因此而有所不同,所以最后的办法就是在这里提问

遵循一些表单指南,没有使用任何VisualStudio(是的,我知道使用它要容易得多,但使用这些东西在过去让我很苦恼,所以想不学习)我制作了表单等等,但是当涉及到实际绘制形状时,我撞到了墙

我做了一些调试,根据我所能确定的,事件根本不会触发。主函数中的图形代码什么也不做,只显示一个空白表单。 我在主代码和事件代码上都尝试了一些变体,这在代码中是可见的,我还尝试使用事件的变体,使用了一个“sender”参数,不知道更改是否有任何区别,它们都没有被触发

using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
using System.Workflow.ComponentModel;

class Genetics : Form
{

    public static Form form1;
    static void Main(string[] args)
    {

        form1 = new Form();
        form1.Size = new Size(800, 800);

        Pen blackpen = new Pen(Color.Black, 10);
        Graphics G = form1.CreateGraphics();

        G.DrawRectangle(blackpen, form1.Width - form1.Width / 2, form1.Width - form1.Width / 2, 300, 300);

      form1.CreateGraphics().DrawRectangle(blackpen, form1.Width -    form1.Width / 2, form1.Width - form1.Width / 2, 300, 300);

        Application.Run(form1);


    }

    protected override void OnPaint(PaintEventArgs e)
    {        
        Graphics graphics;
        graphics = form1.CreateGraphics();

        Pen mypen = new Pen(Color.Black, 5);

        graphics.DrawLine(mypen, 20, 20, 200, 210);

        e.Graphics.DrawRectangle(mypen, 20, 20, 200, 210);

    }


}
我没有得到任何错误或任何东西,它只是。。。除了显示表单之外,什么都不做,但这是一个最小值

我知道这可能很容易修复,但同样,所有教程都使用VisualStudio表单,不确定代码是否不同。由于我试图直接复制代码,但它给了我错误,我认为我是正确的,但不是100%确定。
我有着丰富的经验,我只是习惯于在unity中编写代码,但是从unity到纯代码的过程对我来说很困难。

为了防止我以外的人发现这一点,问题主要有两个: 1,事件没有任何关联,所以我需要添加一行如下内容:

[Form variable].[form event] += new PaintEventHandler([Class].[Method with an object sender and an event argument]
//Example of that
form1.Paint += new PaintEventHandler(Genetics.Paint);
如果不这样做,将不会发生任何事情,因为方法和事件没有连接


2,主要是重复注释,在应用程序实际运行之前,我需要在事件中具有所有绘图函数,因为它们没有任何绘图对象。然后,只需使这些事件中的代码无效,从而强制重新绘制表单

不要创建新的
Graphics
对象,请使用
PaintEventArgs
e.Graphics
)中提供给您的对象。如果出于某种原因,您确实创建了一个新的
图形
(在这里您不需要这样做-只是重复),请确保您
Dispose
它(通常使用
using
语句)。图形对象包装Win32设备上下文,它们需要积极发布。你必须买一本书或遵循教程,WinForm图形太复杂了,无法猜测你的方式。是的,听@DourHighArch。我刚刚查看了您的
Main
func(最初,我只查看了您的
OnPaint
)。创建一个
图形
是没有用的,因为它试图在表单上绘制(尽管
表单
对象已经创建,直到您调用
应用程序。在它上运行
(并且大量后台代码运行),您没有窗口,因此没有可绘制的内容。在Windows窗体中,您应该使用
e.Graphics
OnPaint
中进行所有绘制。您可以通过小心地使窗口的某些部分无效来控制
OnPaint
何时运行。所有这些都可以追溯到Win32(WinForms包装的)@Flydog57嗯,我一般都想找到教程,问题是我看到了使用内置visual studio功能和只对其进行编码之间的区别。区别有多大?有什么区别吗?只是问tp,当涉及表单时,教程是否使用visual studio功能,实际上是可以使用的。@TaW嘿,我只是想感谢你,发现设计器的代码存在于一个.cs文件中(尽管有点隐藏),这帮了我很大的忙,我的脚本开始工作了。所以谢谢:)