简体   繁体   English

在Windows窗体中绘图

[英]Drawing in Windows Forms

I am beginner in drawing anything using Windows Forms and C# and I have a question(I couldnt have found answer on the internet). 我是使用Windows Forms和C#绘制任何东西的初学者,但我有一个问题(我在互联网上找不到答案)。 So here is my problem : I am trying to build simple application where i use trackbar to manipulate the size of rectangle. 所以这是我的问题:我正在尝试构建一个简单的应用程序,在其中使用轨迹栏来控制矩形的大小。

    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.
        }


    }
}

And I just cant figure out how to call OnPaint method when tracBar1_Scroll occurs? 而且我无法弄清楚当出现tracBar1_Scroll时如何调用OnPaint方法吗? Any suggestions? 有什么建议么? Thank you in advance. 先感谢您。

调用this.Invalidate()将触发使OnPaint关闭的事件。

One possibility is to put your drawing code into a separate function which is called from both Form1_Paint and trackBar1_Scroll . 一种可能是将绘图代码放入一个单独的函数中,该函数可以从Form1_PainttrackBar1_Scroll

This method would take a Graphics object as a parameter. 此方法将Graphics对象作为参数。 Something like this: 像这样:

private void DrawStuff( Graphics g )
{
    // your drawing logic goes here
}

And then modify _Paint and _Scroll as follows: 然后按如下所示modify _Paint_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();
}

Alternatively, you could force your form to invalid which would also trigger _Paint to be called: 或者,您可以强制表单无效,这也会触发_Paint调用:

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

Note that Invalidate() has 6 overloads, which allow you varying levels of control over what needs to be invalidated for drawing. 请注意, Invalidate()具有6个重载,这些重载使您可以对需要使绘图无效的内容进行不同级别的控制。

you should also have a look at this link: 您还应该查看以下链接:

http://msdn.microsoft.com/en-us/library/system.windows.forms.trackbar.aspx http://msdn.microsoft.com/en-us/library/system.windows.forms.trackbar.aspx

it has all the information about trackbar which you might find useful, such as the InvokePaintBackground method, or BackColour 它包含有关跟踪栏的所有信息,这些信息可能对您有用,例如InvokePaintBackground方法或BackColour

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM