日期:2014-05-18  浏览次数:21130 次

下面的代码我放在button的click事件中可以执行但放在窗体的load事件中代码执行但没有出现矩形,为什么,求救???
[code=C#][/code]
 if (richTextBox2.Text.Length > 0)
  {
  for (int i = 0; i < richTextBox2.Text.Length; i++)
  {
  Point pt = richTextBox2.GetPositionFromCharIndex(i);
  Graphics g = richTextBox2.CreateGraphics();
  g.DrawRectangle(new Pen(Color.Red, 5), pt.X, pt.Y, 25, 25);
  }
  }
还有就是grahics类创建的对象起到的是画板的作用还是画笔的作用?不太理解书上说有的是画板有的是画笔。。。
 

------解决方案--------------------
要FormLoad之后才可以画图,刚才试了一下,FormLoad时画好的图片会被你的控件挡在后面,所以看不到。

Graphics对象就是封装了一堆画图方法的对象,你给它一个pen或brush,告诉他坐标,大小,要画的地方,他就给你画图了。
------解决方案--------------------
放到paint事件里。
------解决方案--------------------
解决方法:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int i = 0;
PaintEventArgs ex;
bool isload = false;
private void Form1_Load(object sender, EventArgs e)
{
richTextBox1.Text = "2222";
ex = new PaintEventArgs(richTextBox1.CreateGraphics(), richTextBox1.ClientRectangle);
isload = true;
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
DrawRectangleInt(ex);
isload = false;
}

public void DrawRectangleInt(PaintEventArgs e)
{
if (richTextBox1.Text.Length > 0)
{
for (int i = 0; i < richTextBox1.Text.Length; i++)
{
Point pt = richTextBox1.GetPositionFromCharIndex(i);
//Graphics g = richTextBox1.CreateGraphics();
e.Graphics.DrawRectangle(new Pen(Color.Red, 5), pt.X, pt.Y, 25, 25);
}
if(isload==true)
this.Refresh();
}
}
}