0

我是使用 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_Scroll 发生时如何调用 OnPaint 方法?有什么建议么?先感谢您。

4

3 回答 3

3

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

于 2012-08-30T11:15:25.490 回答
1

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

此方法将Graphics对象作为参数。像这样的东西:

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

然后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();
}

或者,您可以强制您的表单无效,这也会触发_Paint被调用:

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

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

于 2012-08-30T11:23:14.553 回答
0

你也应该看看这个链接:

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

它包含有关您可能会发现有用的跟踪栏的所有信息,例如 InvokePaintBackground 方法或 BackColour

于 2012-08-30T11:18:30.373 回答