程序应该在点击时绘制一个矩形。但事实并非如此。也许我对代表的理解有些问题。有什么收获?
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace forms1
{
public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//this.Paint+= new PaintEventHandler(MujPaintHandler);
this.Click += new EventHandler(MujClickHandler);
}
public void MujPaintHandler(object sender,PaintEventArgs e)
{
Graphics gfx=e.Graphics;
gfx.FillRectangle(new SolidBrush(Color.DarkViolet),100,100,200,200);
}
public void MujClickHandler(object sender,EventArgs e)
{
this.Text="aaaaa";
this.Paint+= new PaintEventHandler(MujPaintHandler);
}
}
}
答案 0 :(得分:2)
您编写的代码对我有用,但您的表单窗口必须足够大才能显示矩形。
在诊断上,我要检查的第一件事是表单的标题是否变为“aaaaa”。如果是,那么你知道正在调用click处理程序 - 但是你可能遇到了paint处理程序的问题。如果没有,那么由于某种原因你的点击处理程序没有被调用。
请注意,这不是您在Windows窗体中单击一个矩形的常规方法,但我认为这只是一个学习练习。
答案 1 :(得分:0)
也许你必须强制重绘。如果移动窗口,是否会出现直肠?只需在点击后调用PaintHandler即可。
答案 2 :(得分:0)
我认为你只附加了Paint事件处理程序。您没有调用Paint事件。
试试这个
public void MujClickHandler(object sender,EventArgs e)
{
this.Text="aaaaa";
this.Paint+= new PaintEventHandler(MujPaintHandler);
this.Invalidate();
}
答案 3 :(得分:0)
在分配事件处理程序后尝试强制重绘:
public void MujClickHandler(object sender,EventArgs e)
{
this.Text="aaaaa";
this.Paint+= new PaintEventHandler(MujPaintHandler);
this.Invalidate();
}
此外,如果单击两次,事件处理程序将被分配两次,这不是您想要的。
答案 4 :(得分:0)
如果矩形恰好位于无效区域内,则只会绘制矩形,以更新您更改的文本。
当您更改文本时,它会创建一条消息,表明文本必须重新绘制,这将调用Paint
事件进行绘图。该事件将有一个Graphics
对象,该对象被剪裁到需要重新绘制的矩形以更新文本,因此只会绘制与文本相交的矩形部分。
您必须重新绘制覆盖整个矩形的内容,因此最简单的方法是重绘整个窗口:
this.Invalidate();
请注意,您不应该从Paint
事件处理程序挂钩Click
事件。这意味着事件将在每次单击时再连接一次,因此在每次需要重新绘制某些内容后,在五次单击后,Paint
事件处理程序将被调用五次。
答案 5 :(得分:0)
查看你的代码,我知道你正在尝试在Click上为paint事件添加一个事件处理程序...你还需要调用paint事件..这是一个示例代码,我在其中分配Paint EventHandler按钮单击并在执行时单击点击上的绘制事件
public Form1()
{
InitializeComponent();
this.Click += new EventHandler(MujClickHandler);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ControlKey)
{
MessageBox.Show(e.KeyCode.ToString());
}
}
private void Form1_Load(object sender, EventArgs e)
{
//this.Paint += new PaintEventHandler(MujPaintHandler);
}
public void MujPaintHandler(object sender,PaintEventArgs e)
{
Graphics gfx=e.Graphics;
gfx.FillRectangle(new SolidBrush(Color.DarkViolet),100,100,200,200);
}
public void MujClickHandler(object sender,EventArgs e)
{
this.Text="aaaaa";
this.RaisePaintEvent(this, new PaintEventArgs(this.CreateGraphics(), this.RectangleToClient(new Rectangle())));
}
private void button1_Click(object sender, EventArgs e)
{
this.Paint += new PaintEventHandler(MujPaintHandler);
}