C# C“Graphics.Drawline功能不工作”中的;名称';图形';“在当前上下文中不存在”;
我正在创建我的第一个visual C#程序。我正在尝试绘制图形/线条,但是我遇到了错误“名称‘graphics’在当前上下文中不存在” 这是我课程的全部内容:C# C“Graphics.Drawline功能不工作”中的;名称';图形';“在当前上下文中不存在”;,c#,namespaces,C#,Namespaces,我正在创建我的第一个visual C#程序。我正在尝试绘制图形/线条,但是我遇到了错误“名称‘graphics’在当前上下文中不存在” 这是我课程的全部内容: public Form1() { InitializeComponent(); Pen blackPen = new Pen(Color.Black, 3); Point point1 = new Point(100, 100); Point point2 = new Point(500, 100);
public Form1()
{
InitializeComponent();
Pen blackPen = new Pen(Color.Black, 3);
Point point1 = new Point(100, 100);
Point point2 = new Point(500, 100);
graphics.DrawLine(blackPen, point1, point2);
}
Google告诉我,graphics.DrawLine
函数位于我已经包含的System.Drawing
名称空间中
如果这是一个简单的问题,我深表歉意,因为这是我的“hello world”。您将图形声明为构造函数中的局部变量。您可能更愿意首先将其声明为实例,然后在构造函数中分配它。您将图形声明为构造函数中的局部变量。您可能更愿意首先将其声明为实例,然后在构造函数中分配它。您可能正在使用在线看到的示例,其中
图形
对象作为参数提供给方法或在所示代码之外定义<代码>图形对象可以绘制到各种目标——屏幕、图像、打印机。。。。你应该找出你想要你的图形去哪里;如何初始化或获取对相应的图形对象的引用将取决于此。例如,如果您想要一种简单的方式来绘制屏幕,请通过Windows窗体设计器将绘制
事件处理程序添加到窗体
。当事件触发时,您将得到一个PaintEventArgs
对象,该对象具有名为Graphics
的属性。使用此选项进行绘图。您可能是在网上看到的示例中工作的,图形
对象作为方法的参数提供或在所示代码之外定义<代码>图形
对象可以绘制到各种目标——屏幕、图像、打印机。。。。你应该找出你想要你的图形去哪里;如何初始化或获取对相应的图形对象的引用将取决于此。例如,如果您想要一种简单的方式来绘制屏幕,请通过Windows窗体设计器将绘制
事件处理程序添加到窗体
。当事件触发时,您将得到一个PaintEventArgs
对象,该对象具有名为Graphics
的属性。使用此选项进行绘图。问题似乎是您尚未声明图形变量。我想你需要这样的东西:
public Form1() {
InitializeComponent();
Pen blackPen = new Pen(Color.Black, 3);
Point point1 = new Point(100, 100);
Point point2 = new Point(500, 100);
Graphics graphics = CreateGraphics();
graphics.DrawLine(blackPen, point1, point2);
}
这里的额外一行在当前窗体上创建了一个新的图形对象,您可以使用它来绘制线条。问题似乎是您尚未声明图形变量。我想你需要这样的东西:
public Form1() {
InitializeComponent();
Pen blackPen = new Pen(Color.Black, 3);
Point point1 = new Point(100, 100);
Point point2 = new Point(500, 100);
Graphics graphics = CreateGraphics();
graphics.DrawLine(blackPen, point1, point2);
}
这里的额外一行在当前窗体上创建了一个新的图形对象,您可以使用它来绘制线条。您可以添加一个事件处理程序来绘制窗体的事件,其代码如下所示:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen redPen = new Pen(Color.Red, 30);
Point point1 = new Point(0, 0);
Point point2 = new Point(500, 500);
e.Graphics.DrawLine(redPen, point1, point2);
redPen.Dispose();
}
而不是试图在表单构造函数中绘制。因此,将代码从构造函数移动到此事件处理程序。您可以添加一个事件处理程序来绘制表单的事件,代码如下所示:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen redPen = new Pen(Color.Red, 30);
Point point1 = new Point(0, 0);
Point point2 = new Point(500, 500);
e.Graphics.DrawLine(redPen, point1, point2);
redPen.Dispose();
}
而不是试图在表单构造函数中绘制。因此,将代码从构造函数移动到此事件处理程序。这是一种绘制表单的错误方法。请参阅以了解原因。@adv12这是“Hello World”我的第一个应用程序类型,没有必要尝试宣传最佳实践,问题是尝试使用未声明的变量。问题是尝试使用未声明的变量;现在是关于为什么当窗口被遮挡、调整大小或拖离屏幕时,图形不会被重新绘制。您的答案将编译错误替换为bug。这是一种不好的绘制表单的方法。请参阅以了解原因。@adv12这是“Hello World”我的第一个应用程序类型,没有必要尝试宣传最佳实践,问题是尝试使用未声明的变量。问题是尝试使用未声明的变量;现在是关于为什么当窗口被遮挡、调整大小或拖离屏幕时,图形不会被重新绘制。你的答案是用编译错误来换取错误。MSDN文章中描述了创建图形对象的正确方法。艺术不错,但也不好。它无法明确使用control.CreateGraphics中的图形绘制的任何东西都不会持久化。MSDN文章中描述了创建图形对象的正确方法。艺术不错,但也不好。它无法明确使用控件中的图形绘制的任何东西。CreateGraphics不会持久化。不要忘记对Pen对象调用Dispose。@Jackdaw Yeap,使用此Dispose调用可以改进代码,注意!我更新了代码。非常感谢您的回答…我已经在Form1类中包含了您的函数,但是当我运行应用程序时,它似乎什么都没做。是否还有其他需要执行的操作?不客气,您应该检查代码是否是表单的“Paint”事件的事件处理程序。因此,选择表单,然后单击“事件”选项卡,然后在“外观”类别中双击“绘制”事件,这将在该事件处理程序中创建“绘制”事件的事件处理程序,并从示例的事件处理程序中添加代码。别忘了调用Pen对象上的Dispose。@Jackdaw Yeap,使用此Dispose调用可以改进代码,说得好!我更新了代码。非常感谢您的回答…我已经在Form1类中包含了您的函数,但是当我运行应用程序时,它似乎什么都没做。是否还有其他需要执行的操作?不客气,您应该检查代码是否是表单的“Paint”事件的事件处理程序。因此,选择表单,然后单击事件选项卡,然后在“外观”类别中双击“绘制”事件,这将创建“Pai”的事件处理程序