Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体中的绘图_C#_Winforms - Fatal编程技术网

C# Windows窗体中的绘图

C# Windows窗体中的绘图,c#,winforms,C#,Winforms,我是使用Windows窗体和C#绘制任何东西的初学者,我有一个问题(我在互联网上找不到答案)。所以我的问题是:我正在尝试构建一个简单的应用程序,在这个应用程序中,我使用轨迹栏来操纵矩形的大小 namespace Drawing { public partial class Form1 : Form { int size = 10; public Form1() { InitializeComponen

我是使用Windows窗体和C#绘制任何东西的初学者,我有一个问题(我在互联网上找不到答案)。所以我的问题是:我正在尝试构建一个简单的应用程序,在这个应用程序中,我使用轨迹栏来操纵矩形的大小

    namespace Drawing
{
    public partial class Form1 : Form
    {
        int size = 10;
        public Form1()
        {
            InitializeComponent();
            CenterToScreen();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {

            Graphics g = pe.Graphics;
            Rectangle rect = new Rectangle(50,50, size,size);
            LinearGradientBrush IBrush = new LinearGradientBrush(rect, Color.Green, Color.Yellow,
                LinearGradientMode.BackwardDiagonal);
            g.FillRectangle(IBrush, rect);

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
           size = trackBar1.Value;
 // I was trying to put here OnPaint method but it doesnt work.
        }


    }
}

当tracBar1\u滚动出现时,我不知道如何调用OnPaint方法?有什么建议吗?提前谢谢。

呼叫此按钮将触发导致
OnPaint
启动的事件。

呼叫此按钮将触发导致
OnPaint
启动的事件。

您还应该查看此链接:


它包含了有关轨迹栏的所有信息,您可能会发现这些信息很有用,例如InvokePaintBackground方法或BackColor。您还应该查看以下链接:


它包含您可能会发现有用的关于轨迹栏的所有信息,例如InvokePaintBackground方法或BackColor

一种可能性是将绘图代码放入一个单独的函数中,该函数从
Form1\u Paint
trackBar1\u Scroll
调用

此方法将
图形
对象作为参数。大概是这样的:

private void DrawStuff( Graphics g )
{
    // your drawing logic goes here
}
然后
修改_Paint
\u Scroll
,如下所示:

private void Form1_Paint( object sender, PaintEventArgs e )
{
    DrawStuff( e.Graphics );
}

private void trackBar1.Scroll( object sender, EventArgs e )
{
    Graphics g = this.CreateGraphics();

    DrawStuff( g );

    g.Dispose();
}
或者,您可以强制表单无效,这也会触发调用
\u Paint

private void trackBar1.Scroll( object sender, EventArgs e )
{
    this.Invalidate();
}

请注意,
Invalidate()
有6个重载,允许您对绘图需要无效的内容进行不同程度的控制。

一种可能性是将绘图代码放入一个单独的函数中,该函数从
Form1_Paint
trackBar1_Scroll
调用

此方法将
图形
对象作为参数。大概是这样的:

private void DrawStuff( Graphics g )
{
    // your drawing logic goes here
}
然后
修改_Paint
\u Scroll
,如下所示:

private void Form1_Paint( object sender, PaintEventArgs e )
{
    DrawStuff( e.Graphics );
}

private void trackBar1.Scroll( object sender, EventArgs e )
{
    Graphics g = this.CreateGraphics();

    DrawStuff( g );

    g.Dispose();
}
或者,您可以强制表单无效,这也会触发调用
\u Paint

private void trackBar1.Scroll( object sender, EventArgs e )
{
    this.Invalidate();
}

请注意,
Invalidate()
有6个重载,允许您对绘图时需要失效的内容进行不同程度的控制。

我认为他不是在尝试重新绘制轨迹栏本身,而是在尝试重新绘制表单的内容。是的,我在考虑重新编写表单内容。我想他不是在试图重新绘制轨迹栏本身,而是在重新编写表单内容。是的,我在考虑重新编写表单内容。实际上,这对我不起作用。我的意思是,当我向上滚动轨迹栏时,它会生成矩形,但当我向下滚动而不是修改矩形的大小时,它会生成另一个矩形。谢谢你为我的问题提出这个想法。它实际上对我不起作用。我的意思是,当我向上滚动轨迹栏时,它会生成矩形,但当我向下滚动而不是修改矩形的大小时,它会生成另一个矩形。谢谢你为我的问题提出这个想法。